不同型号的独特电子邮件

时间:2016-02-10 16:12:31

标签: django django-models django-forms

我有两种不同的型号contian email field:

class Model1(models.Model):
    email = models.EmailFields(unique=True)
    """
    other fileds
    """
class Model2(models.Model):
    email = models.EmailFields(unique=True)
    """
    other fileds
    """

这些模型不必包含相同的电子邮件。我怎样才能做到这一点? 对于每个模型,请在每个clean中使用ModelForm方法:

class Model1Form(forms.ModelForm):
    class Meta:
        model = Model1
        fields = ['email', ...]

    def clean(self):
        cleaned_data = super().clean()
        email = self.cleaned_data.get('email')
        if Model2.objects.filer(email=email).exists():
            self.add_error('email', 'Email have to be unique')

和其他ModelForms一样?

1 个答案:

答案 0 :(得分:0)

您可以使用multi-table inheritance。然后,所有电子邮件将存储在单个表中,唯一约束将在数据库标签处理。

BaseModel(models.Model):
    email = models.EmailFields(unique=True)

class Model1(models.Model):
    # other fields

class Model2(models.Model):
    # other fields

如果您不想使用多表继承,则必须手动检查另一个表。为了避免重复,也许您可​​以编写基础模型表单类,并将其子类化。