鉴于以下模型:
class User(models.Model):
role = models.IntegerField(default=0, blank=True)
name = models.CharField(max_length=255, blank=False, null=False)
email = models.EmailField(max_length=128, unique=True, blank=False, null=False)
我需要form.is_valid()
跳过unique
字段上的email
约束。
至关重要的是,电子邮件将是unique
,但在一个特定的view
中,我想使用get_or_create
,这似乎不起作用:
if form.is_valid():
usr, usr_created = models.User.objects.get_or_create(email=form.email)
<...>
这可能吗?
答案 0 :(得分:0)
这是不可能的。
unique=True
创建一个数据库约束,用于检查字段的唯一性。通过它的设计,这不允许非唯一值,唯一的方法是消除约束。
如果问题是您想要允许多个空值,则可以设置null=True
。约束仍然认为多个NULL
值是唯一的。
答案 1 :(得分:0)
不要在字段列表中列出要覆盖的字段,并在ModelForm中创建一个新的自定义字段:
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ["role", "name"]
email = forms.EmailField(max_length=128)
def save(self, commit=True):
instance = super(PatientForm, self).save(commit=False)
instance.email= self.cleaned_data.get("email")
return instance.save(commit)