モデルのインスタンスを渡しながら、フォームを介してモデルを更新しようとしています。
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'),)
フォーム.py
class ProfileForm(forms.ModelForm):
class Meta:
model = models.Profile
Django は is_valid() を呼び出しながら、フォーム上で *validate_unique* という関数を実行します。しかし、なぜ?挿入では意味がありますが、更新では意味がありません。
is_valid() を呼び出す前に、これを実行しながら回避できます。
def f(): pass
form.validate_unique = f
適切な解決策はありますか?