我对表单有一个奇怪的问题,在渲染表单时重用两个视图中的表单会产生奇怪的行为。
我有一个表单,我在两个视图中重用,一个视图使用一个表单,因为它是第二个删除一个字段,因为我在url中提供该字段的值。他们后来又回到了第一个观点。
如果你使用django-crispy-forms来渲染你的表单,这尤其令人讨厌。
代码:
第一个观点:
def get_form(self, form_class):
return super(BaseSale, self).get_form(form_class)
第二种观点:
def get_form(self, form_class):
form = super(BaseSale, self).get_form(form_class)
del form.fields['price']
return form
以下是用户案例:
首先请求,我在view1中渲染formA
第二个请求,我在view2中渲染formA,但删除了一个不打算使用的字段。
第三个请求,我再次在view1中渲染formA,我在view2中删除的字段是存在的,但是字段的顺序是错误的。
这必须与不是线程安全的表单有关,但我无法调试它。
有任何解决此问题的想法吗?
答案 0 :(得分:0)
不确定这会解决问题,但您可能希望使用当前类调用super
。在您的代码示例中,您可以在两个视图中调用super(BaseSale, self)
。复制/粘贴后你忘了解决这个问题吗?
其次,最好使用不同的表单类。如果你想重用表单的某些部分,那么添加一个基本表单类并根据需要多次扩展它。
最后,如果您需要动态表单,那么最好将表单构建逻辑封装到表单中。您可以在__init__
方法中添加/删除字段。