我有一个看起来像这样的 Django 模型。
class Solution(models.Model):
'''
Represents a solution to a specific problem.
'''
name = models.CharField(max_length=50)
problem = models.ForeignKey(Problem)
description = models.TextField(blank=True)
date = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = ("name", "problem")
我使用如下形式添加模型:
class SolutionForm(forms.ModelForm):
class Meta:
model = Solution
exclude = ['problem']
我的问题是 SolutionForm
没有验证 Solution
的 unique_together
约束,因此它返回一个 IntegrityError
试图保存表单时。我知道我可以使用 validate_unique
手动检查这一点,但我想知道是否有任何方法可以在表单验证中捕获它并自动返回表单错误。
谢谢。
最佳答案
我通过覆盖 ModelForm 的 validate_unique()
方法解决了同样的问题:
def validate_unique(self):
exclude = self._get_validation_exclusions()
exclude.remove('problem') # allow checking against the missing attribute
try:
self.instance.validate_unique(exclude=exclude)
except ValidationError, e:
self._update_errors(e.message_dict)
现在我总是确保表单上未提供的属性仍然可用,例如instance=Solution(problem=some_problem)
在初始化器上。
关于Django 的 ModelForm unique_together 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2141030/