如何检查名字和姓氏在创建时是否唯一?

时间:2018-11-09 02:48:53

标签: django forms

我有以下模型:

class Person(models.Model):
    short_name = models.CharField(max_length=64)
    long_name = models.CharField(max_length=64)

,我的格式如下:

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = ['short_name', 'long_name']

现在我正在使用此表单进行更新和创建。

如果有人尝试创建具有相同short_name和long_name的Person,我希望此表单引发ValidationError。

但是,如果用户正在修改现有用户的数据,我不想引发异常。

我曾想过要编写一个干净的方法来检查Person.objects.filter(long_name=X, short_name=Y).count()是否返回任何内容,但是当我修改现有实例时,这种情况会错误地失败。

您将如何更改?

2 个答案:

答案 0 :(得分:1)

您可以通过在模型级别使用here in the django documentation如图所示的unique_together来完成此操作

答案 1 :(得分:1)

现有实例是具有get_transient()值的实例。因此,只需在您的get_transient()方法中进行检查即可:

SELECT * FROM $wpdb->options WHERE option_name LIKE '_transient_active_user_%'