1

私のアプリには、それぞれが 1 つの課金プロファイルを持つクライアントがあります。

「 BillingProfile 」という別のモデルを参照する「 billing_profile 」という属性を持つ「 Client 」モデルを持つアプリを想定しています。「クライアント」に戻る外部キーを使用して「 BillingProfile 」を定義するのではなく(つまり、「 client = models.ForeignKey(Client)」)、クライアントごとに単純に使用できる請求プロファイルが 1 つしかないため、と考えていました。代わりに 1 対 1 のフィールド。これは理にかなっているように見えますか、それとも後ろ向きに見えますか (その場合、クライアントを確立する前に BillingProfile を作成する必要があります)。それを理解する私のパラダイムに対してこれを行う良い方法はありますか?

4

2 に答える 2

2

あなたがそれが1対1の関係であると確信しているならば、それはそれをする方法です。たとえば、2つの請求プロファイルを持つクライアントが存在する可能性があります。1つは個人用、もう1つはビジネス用です。

1対1を使用するか、外部キーを使用しても作成の順序に影響しないため、逆方向ではありません(どちらの場合も、最初にプロファイルを作成するか、最初にクライアントを作成してからリンクすることができます)。

于 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 をインスタンス化する必要がないことを意味しますが、その逆ではなく、Client にbillingprofile 属性があった場合と同じ利点があります。

言い換えれば、以前はすべて後ろ向きに考えていましたが、あまり後ろ向きではありませんでした。

于 2009-12-23T22:32:32.303 に答える