django - Django唯一约束+表单错误

标签 django constraints unique relational-database

我在自己的网站上重复发布时遇到了一些问题。我认为跨所有相关字段的简单唯一约束将在数据库级别解决此问题,但随后它只会为用户带来令人讨厌的错误页面。有没有办法我可以把它变成漂亮的表格错误呢?像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/

相关文章:

python - 用 python 中的数字替换嵌套列表中的唯一值

android - 约束布局不起作用,可能是设计编辑器中的错误?

c# - 如何在 C# 中验证值的集合是唯一的(不包含重复项)

python - 将 django-mssql 连接到 mssql 服务器(azure)

python - 无法在 virtualenv 中使用 Django

java - 为什么 bean 验证 Min/Max 约束不支持 double 类型?

ios - UICollectionView 的框架大小大于 UIScreen 的大小

javascript - 多个下拉菜单按钮 - 仅打开单击的按钮

django - Matplotlib - Django 中的 Mpld3 Fig_to_html()

django - 在 Django 1.8 上的 python3.5 中打印变量类型