我在自己的网站上重复发布时遇到了一些问题。我认为跨所有相关字段的简单唯一约束将在数据库级别解决此问题,但随后它只会为用户带来令人讨厌的错误页面。有没有办法我可以把它变成漂亮的表格错误呢?像non_field_error
一样?还是我应该采取什么方法?
最佳答案
也许这样的事情可以帮助您:
class YourForm(forms.Form):
# Everything as before.
...
def clean(self):
cleaned_data = self.cleaned_data
your_unique_key = cleaned_data['your_unique_key']
if your_unique_key and YourModel.objects.get(your_unique_key=your_unique_key):
raise forms.ValidationError("not unique")
# Always return the full collection of cleaned data.
return cleaned_data
clean()
方法将允许您访问表单的所有字段,如果您具有组合的唯一键,这可能会很有用。否则,(很短)的clean_your_unique_key()
可能更适合您。并且请注意,在极少数情况下(竞赛条件),表单验证可能不会报告重复的条目(但数据库引擎会报告该条目)。但是对于大多数应用程序,所提供的示例将是更容易且更易于维护的示例,因此我仍然推荐这种方法。
关于django - Django唯一约束+表单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3473165/