Django动态生成表单集。删除表单抛出验证错误

时间:2015-07-23 16:23:09

标签: javascript ajax django django-forms formset

我有一个使用inlineformset_factory创建的内联formset。这是一个简化的例子。

#models.py
class MyModel(models.Model):
    owner = models.ForeignKey(User)
    job_type = models.ForeignKey(JobType)
    price = models.IntegerField()
class Meta:
    unique_together = (('owner', 'job_type'),)

#forms.py
formset = inlineformset_factory(User, MyModel, fields=('job_type', 'price'))

我正在使用javascript动态添加额外的表单并从我的formset中删除表单。当您单击以删除表单时,它将被隐藏。然后,我使用AJAX提交表单,并在必要时发回错误。

除了一个细节外,这一切都很好。 MyModel具有独特的共同条件。如果有人删除了预先存在的表单(因此它被隐藏),然后添加另一个具有相同job_type并提交的表单,则即使正在删除其中一个表单,django也会抛出唯一性验证错误。

我以为我可以通过清除已删除表单上的job_type字段来解决这个问题,但它会抛出一个'此字段是必需的'错误AND仍然会抛出唯一性错误。

非常感谢任何帮助!

更新

进一步的研究表明,管理界面中也存在错误。如果为模型包含具有唯一性条件的内联,然后尝试并删除AND并创建具有相同值的内联对象,则会抛出唯一性错误。所以我想这是django的formset验证的一个特性。虽然我不确定这种行为的优点是什么,但也许这是一个错误。当被删除的表格不被隐藏时,更为明显的是什么。

尽管如此,我们还是非常感谢能够帮助您解决这个问题。

0 个答案:

没有答案