2011-12-06 35 views
0

我有以下情况:OneToOneField与ForeignKey的

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 ES,但只有一个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。我在这里做错了什么?

回答

0

我需要保存之前设置的AddressPhoneNumberuser_profile

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() 
0

如果没有提供名称,看起来您将地址设置为“默认”。如果是这样的话,为什么不摆脱One-To-One字段,并简单地在Professor模型上创建一个实例方法,以“default”名称为您提供地址。

或者,您可以在Address模型上创建一个名为is_default(或沿着这些行的东西)的布尔字段,并在没有提供名称的情况下将其设为True。

3

你有一个错字在你的代码:

professor.default_addresss = address 

应该

professor.default_address = address 

基本上,什么都不会发生在save()非模型属性。