我有分类和电子邮件模型:
class EmailAddress(models.Model):
address = models.EmailField(unique=True)
class Classified(models.Model):
title = models.CharField(...)
contact_email = models.ForeignKey(EmailAddress)
在表单中,我希望用户使用常规电子邮件地址来输入电子邮件地址。如果找不到地址,则创建并将其保存到数据库。我在这里归档了这个:
class CreateClassifiedForm(forms.ModelForm):
contact_email = EmailField(label=_('Contact Email'))
class Meta:
model = Classified
fields = ['category', 'title', 'contact_email',
'contact_email_visible', 'contact_email_proxied', 'desc']
def save(self, *args, **kwargs):
self.cleaned_data['contact_email'] = \
EmailAddress.objects.get_or_create(
address=self.cleaned_data['contact_email'])[0]
clsfd = Classified(**self.cleaned_data)
clsfd.save()
return clsfd
但是当我调用此表单的is_valid()方法时,我收到错误:
Cannot assign "u'foo@foo.com'": "Classified.contact_email" must be a "EmailAddress" instance.
我认为is_valid方法尝试从给定字段实例化对象并失败。归档我正在尝试做的事情的最佳做法是什么?
答案 0 :(得分:0)
你根本不应该在save
中这样做。相反,覆盖clean_contact_email
只是从get_or_create返回EmailAddress,并完全删除保存定义。