1

我的应用程序有客户端,每个客户端都有一个计费配置文件。

我设想我的应用程序有一个“客户端”模型,该模型具有一个名为“ billing_profile ”的属性,该属性将引用另一个名为“ BillingProfile ”的模型。与其定义“ BillingProfile ”,外键返回“Client”(即“ client = models.ForeignKey(Client) ”),我在想,因为每个客户只有一个计费配置文件,我可以简单地使用一个一对一的字段。这看起来合乎逻辑,还是看起来倒退(然后我必须在建立客户端之前创建一个 BillingProfile)。与我的理解范式相比,有没有一种好的方法可以做到这一点?

4

2 回答 2

2

如果您确定它是一对一的关系,那就是这样做的方法。例如,是否有一个客户有 2 个计费配置文件:一个供个人使用,一个供他的业务使用,&c...

它不是倒退的,因为使用一对一或使用外键不会影响创建顺序(在这两种情况下,您都可以先创建配置文件,或者先创建客户端,然后链接它们)。

于 2009-12-23T06:17:41.057 回答
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 属性而不是相反,我仍然可以获得我将拥有的好处。

换句话说:我以前都是倒着想的,但不是太倒退。

于 2009-12-23T22:32:32.303 回答