Django:由于唯一约束,通过表单更新模型失败

时间:2013-11-04 23:42:50

标签: python django forms unique-constraint

我正在尝试在传递模型实例的同时通过表单更新模型。

form = forms.ProfileForm(params, instance=profile)
if not form.is_valid():
    print form.errors

但它失败了:

“此应用和电子邮件的个人资料已存在。”

以下是参数

params = {'first_name': u'foo', 'last_name': u'bar', 'app': 1, u'id': 12349, 'phone': u'999', 'email': u'foo@bar.com'}

模型

profile = Profile.objects.get(pk=12349)
model_to_dict(profile)

{'first_name': u'foo', 'last_name': u'bar', 'app': 1, u'id': 12349, 'phone': u'12345', 'email': u'foo@bar.com'}

model.py

class Profile(models.Model):
    app = models.ForeignKey('core.App', null=False)
    email = models.EmailField(null=True, blank=True, default=None)
    first_name = models.CharField(max_length=64, default=None, null=True)
    last_name = models.CharField(max_length=64, default=None, null=True)
    phone = models.CharField(max_length=32, null=True, blank=True)

    class Meta:
        unique_together = (('app', 'email'),)

forms.py

class ProfileForm(forms.ModelForm):
    class Meta:
        model = models.Profile

Django在调用is_valid()时在表单上执行一个名为* validate_unique *的函数。 但为什么?它在插入时有意义,但在更新时没有意义。

我可以在调用is_valid()之前解决这个问题:

def f(): pass
form.validate_unique = f

有适当的解决方案吗?

0 个答案:

没有答案