1

我的應用程序具有每個都有單個結算配置文件的客戶端。Django:如何定義模型關係以實現以下目標?:

我預想具有所謂的「billing_profile」,這將參照名爲「BillingProfile」另一個模型屬性的「客戶」模型我的應用程序。而不是將「BillingProfile」與一個外鍵定義回「客戶端」(即「client = models.ForeignKey(Client)」),我想這是因爲每個客戶端只有一個帳單配置文件我可以簡單地使用一對一的字段。這似乎是合乎邏輯的,或者看起來倒退了(然後在建立客戶端之前,我將不得不創建一個BillingProfile)。有沒有一個好的方法來做到這一點,而不是我理解它的範例?

回答

1

我想通了。

OneToOneField()可以通過簡單的屬性方法查找兩種方式。

例子:

型號:

class Client(models.Model): 
    ... stuff ... 


class BillingProfile(models.Model): 
    client = models.OneToOneField('Client') 
    ... stuff ... 

現在我能做的任一:

spam_client.billingprofile # returns related BillingProfile Instance 

spam_billingprofile.client # returns related Client instance 

這意味着我不必實例化BillingProfile,直到我'已經準備好了,但如果客戶擁有billingprofile屬性而不是其他方式,我仍然可以享受到這些好處。

換句話說:我之前想過的都是倒退,但不能太倒退。

2

如果你確定它是一對一的關係,那就是這樣做的。 例如,莫不是有2種賬單情況客戶端:一個供個人使用,併爲他的生意,&ç...

這不是倒退,因爲採用一對一,或使用外鍵不會影響創建順序(既可以先創建配置文件,也可以先創建客戶端,然後將其鏈接)。

+0

謝謝Ofri。除非A)我使用blank = True(我希望所有客戶端擁有BillingProfile)或B)我使用save(commit = False),否則我怎麼能創建一個沒有billing_profile屬性設置的客戶端(即,沒有創建BillingProfile)在我的新客戶端上,然後創建BillingProfile並將其添加到客戶端,然後在客戶端上再次使用save()。我是否認爲這一切都錯了? – orokusaki 2009-12-23 06:22:03

+0

這是2種方式來做到這一點。一些更多的想法可以在這裏找到:http://stackoverflow.com/questions/1652550/can-django-automatically-create-a-related-one-to-one-model – 2009-12-23 06:38:49