我有一个使用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验证的一个特性。虽然我不确定这种行为的优点是什么,但也许这是一个错误。当被删除的表格不被隐藏时,更为明显的是什么。
尽管如此,我们还是非常感谢能够帮助您解决这个问题。