2011-12-06 91 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()非模型屬性。