Django唯一约束+表单错误

mpe*_*pen 4 django constraints unique relational-database

我在我的网站上发布双重帖有些问题.我认为所有相关领域的简单唯一约束将解决数据库级别的问题,但它只会为用户生成一个讨厌的错误页面.有没有办法可以把它变成漂亮的形式错误呢?喜欢non_field_error?或者我应该采取什么方法?

tux*_*21b 11

也许这样的事情可以帮助你:

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
Run Code Online (Sandbox Code Playgroud)

clean()方法将允许您访问表单的所有字段,如果您具有组合的唯一键,则该字段可能很有用.否则(短得多)clean_your_unique_key()可能更适合你.

请注意,在极少数情况下(竞争条件),表单验证可能不会报告重复的条目(但它当然是由数据库引擎报告的).但是对于大多数应用程序来说,提供的示例将更容易,更易于维护,所以我仍然推荐这种方法.