我有两种不同的型号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一样?
答案 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
如果您不想使用多表继承,则必须手动检查另一个表。为了避免重复,也许您可以编写基础模型表单类,并将其子类化。