带有ForeignKey的OneToOneField

时间:2011-12-06 03:28:01

标签: django django-models

我有以下情况:

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_addressNone。我在这做错了什么?

3 个答案:

答案 0 :(得分:3)

您的代码中有拼写错误:

professor.default_addresss = address

应该是

professor.default_address = address

基本上,save()对于非模型属性没有任何反应。

答案 1 :(得分:0)

如果没有提供名称,您似乎将地址设为“默认”。如果是这种情况,为什么不去掉One-To-One字段,只需在教授模型上创建一个实例方法,该方法可以获得名称为“default”的地址。

或者,您可以在地址模型上创建一个名为is_default的布尔字段(或沿着这些行的某些内容),如果没有提供名称,则将其设为True。

答案 2 :(得分:0)

我需要在保存之前在user_profileAddress设置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()