![]() |
1
102
我会用 functools.partial 和 functools.wraps :
我认为这是最干净的方法,并且不会以任何方式影响ServiceForm(即使子类化变得困难)。 |
![]() |
2
45
我将在一个函数中动态地构建表单类,这样它就可以通过闭包访问关联:
另外,您不必在选项字段中重写查询集。缺点是子类化有点奇怪。(任何子类都必须以类似的方式制作。) 编辑: 作为对注释的响应,您可以对将使用类名的任何位置调用此函数:
|
![]() |
3
37
公文方式Django 2:
|
![]() |
4
16
这就是我的工作,Django 1.7:
希望它能帮助别人,花了我足够长的时间才弄明白;) |
![]() |
5
9
我喜欢闭包解决方案,因为它“更干净”和更多的pythonic(so+1到mmarshall答案),但是django表单也有一个回调机制,可以用来过滤表单集中的查询集。 它也没有文档记录,我认为这是一个指标,Django开发人员可能不太喜欢它。 所以您基本上创建了相同的表单集,但添加了回调:
这将创建如下所示的类的实例:
这应该给你一个大概的想法。使回调成为这样的对象方法有点复杂,但是与执行简单的函数回调相比,它给了您更多的灵活性。 |
![]() |
6
9
我想把这句话作为对卡尔·梅耶斯答案的评论,但因为这需要点,所以我把它放在这里。我花了2个小时才弄明白,所以我希望它能帮助别人。 关于使用inlineformset_工厂的说明。 我用这个方法解决了我自己的问题,而且效果很好,直到我在inlineformset工厂尝试过。我在运行django 1.0.2,得到了一些奇怪的keyerror异常。我升级到最新的行李箱,它直接工作。 我现在可以这样使用它:
|
![]() |
7
9
截止到2012年8月14日星期二23:44:46+0200提交e091c18f50266097f648efc7cac2503968e9d217,已接受的解决方案将无法再工作。 django.forms.models.modelForm_Factory()函数的当前版本使用“类型构造技术”,在传递的表单上调用type()函数以获取元类类型,然后使用结果动态构造其类型的类对象:
这意味着即使是
为了解决这个问题,我编写了一个生成器函数,该函数使用闭包返回指定为第一个参数的任何类的子类,然后调用
然后在您的代码中,您将调用表单工厂作为:
注意事项:
|
![]() |
8
3
卡尔·迈耶的解决方案看起来很优雅。我试着为模型集实现它。我觉得我不能在类中调用staticmethods,但是下面的方法确实有效:
在我看来,如果我这样做:
然后“request”关键字被传播到我的表单集的所有成员表单。我很高兴,但我不知道为什么这是有效的-这似乎是错误的。有什么建议吗? |
![]() |
9
1
在看到这篇文章之前,我花了一些时间想弄清楚这个问题。 我提出的解决方案是闭包解决方案(这是我以前在Django模型表单中使用过的解决方案)。 我尝试了上面描述的curry()方法,但是我无法让它与django 1.0一起工作,所以最后我恢复到闭包方法。 闭包方法非常整洁,唯一有点奇怪的是类定义嵌套在视图或其他函数中。我认为这对我来说很奇怪,这是我以前编程经验的一个障碍,我认为有更动态语言背景的人是不会眨眼的! |
![]() |
10
1
我也不得不做类似的事情。这和
|
![]() |
11
0
我是这里的新手,所以我不能添加评论。我希望这个代码也能工作:
对于向表单集添加其他参数
|
![]() |
12
0
基于 this answer 我找到了更清晰的解决方案:
在视图中运行它
|
![]() |
Florent · 如何在Django中聚合多个字段? 1 年前 |
![]() |
KWunsch · Django没有将pk引入模板 1 年前 |
|
Akshay mek · Vscode扩展建议不适用于某些文件夹 1 年前 |
![]() |
Farid · 限制django每个客户的访问 2 年前 |
![]() |
Blue · 从Django中的输入字段获取用户输入 2 年前 |
![]() |
4SadMemeXD · 无法在Django中选择相关类别 2 年前 |