我有以下情况:
class Professor(models.Model):
default_address = models.OneToOneField('Address')
class Address(models.Model):
name = models.CharField()
street_address = models.CharField()
# ...
professor = models.ForeignKey("Professor", related_name="addresses")
基本上,一个Professor
可以有多个Address
与之关联,但只选择了一个default_address
。但是,当我用我的观点保存东西时,事情不能正常工作,事情并没有恰到好处地联系起来:
form = forms.ProfileEditForm(request.POST)
if form.is_valid():
address = professor.default_address or models.Address()
address.name = "Default" if address.name == None else address.name
address.street_address = form.cleaned_data['street_address']
address.street_address_2 = form.cleaned_data['street_address_2']
# ...
address.save()
professor.default_addresss = address
professor.save()
保存后,professor.default_address
为None
。我在这做错了什么?
答案 0 :(得分:3)
您的代码中有拼写错误:
professor.default_addresss = address
应该是
professor.default_address = address
基本上,save()
对于非模型属性没有任何反应。
答案 1 :(得分:0)
如果没有提供名称,您似乎将地址设为“默认”。如果是这种情况,为什么不去掉One-To-One字段,只需在教授模型上创建一个实例方法,该方法可以获得名称为“default”的地址。
或者,您可以在地址模型上创建一个名为is_default
的布尔字段(或沿着这些行的某些内容),如果没有提供名称,则将其设为True。
答案 2 :(得分:0)
我需要在保存之前在user_profile
和Address
设置PhoneNumber
:
address.user_profile = user.profile
address.save()
phone_number.user_profile = user.profile
phone_number.save()
user.profile.default_address = address
user.profile.default_phone_number = phone_number
user.profile.save()