我的应用拥有的客户每个都有一个结算资料。
我想我的应用程序有一个“客户端”模型,其中包含一个名为“ billing_profile ”的属性,该属性会引用另一个名为“ BillingProfile ”。而不是用外键将“ BillingProfile ”定义回“客户”(即“ client = models.ForeignKey(Client)”),我当时在想我只能使用一对一的字段来为每个客户提供一个结算资料。这看起来是合乎逻辑的,还是看起来倒退(然后我必须在建立客户端之前创建BillingProfile)。有没有一种方法可以做到这一点,而不是我理解它的范式?
答案 0 :(得分:2)
如果你确定它是一对一的关系,那就是这样做的方法。 例如,是否有一个客户有2个账单配置文件:一个用于个人用途,并用于他的业务,& c ...
它不是向后的,因为使用一对一或使用外键不会影响创建的顺序(您可以先创建配置文件,或先创建客户端,然后链接它们)。
答案 1 :(得分: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属性而不是相反的方式,我仍然可以获得好处。
换句话说:我以前都在考虑这一切,但不是太落后。