0

我对表单有一个奇怪的问题,在两个视图中重用表单会在呈现表单时出现奇怪的行为。

我有一个我在两个视图中重用的表单,一个视图使用一个表单,因为它是第二个删除一个字段,因为我在 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 第一个请求,我在 view1 中渲染 formA

第二个请求,我在 view2 中呈现 formA,但删除了一个不打算使用的字段。 第二个请求,我在 view2 中呈现 formA,但删除了一个不打算使用的字段

第三个请求,我再次在view1中渲染formA,我在view2中删除的字段在那里,但是字段的顺序是错误的。

第三个请求,我再次在view1中渲染formA,我在view2中删除的字段在那里,但是字段的顺序是错误的。

这必须与不是线程安全的表单有关,但我无法调试它。

有什么想法可以解决这个问题吗?

4

1 回答 1

0

不确定这是否能解决问题,但您可能想super使用当前课程进行通话。在您的代码示例中,您super(BaseSale, self)在两个视图中都调用了。您是否忘记在复制/粘贴后修复此问题?

其次,最好使用不同的表单类。如果您想重用表单的某些部分,请添加一个基本表单类并根据需要对其进行多次扩展。

最后,如果您需要一个动态表单,那么最好将表单构建逻辑封装到表单中。您可以在方法中添加/删除字段__init__

于 2013-10-12T21:44:02.580 回答