Frage

Meine app hat Kunden, die jeweils ein einzelnes Abrechnungsprofil hat.

Ich bin Vorstellungsvermögen meine app ein " Client " Modell mit einem Attribut namens mit " billing_profile ", die ein anderes Modell „ BillingProfile “. Anstatt definieren " BillingProfile " mit einem Fremdschlüssel zurück zu "Client" (dh " client = models.ForeignKey (Client) "), dachte ich, dass da wird nur ein Abrechnungsprofil für jeden Kunden sein, dass ich einfach stattdessen ein eins-zu-eins-Feld nutzen könnte. Ist dies logisch erscheinen zu tun, oder ist es nach hinten scheinen (Dann hätte ich einen BillingProfile erstellen, bevor überhaupt eine Client-Einrichtung). Gibt es eine gute Möglichkeit, dies im Vergleich zu meinem Paradigma zu tun, es zu verstehen?

War es hilfreich?

Lösung 2

ich es herausgefunden.

Ein OneToOneField () kann über die einfache Attribut Methode in beiden Richtungen nachgeschlagen werden.

Beispiel:

Modelle:

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


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

Jetzt kann ich entweder dieser:

spam_client.billingprofile  # returns related BillingProfile Instance

oder

spam_billingprofile.client  # returns related Client instance

Dieses Mittel Ich muß nicht die BillingProfile instanziiert, bis ich fertig bin, aber ich habe immer noch die Vorteile, dass ich hätte, wenn der Kunde ein billingprofile Attribut anstelle der anderen Art und Weise hat mich um.

Mit anderen Worten:. Ich war vor allem nach hinten daran zu denken, aber nicht zu rückwärts

Andere Tipps

Das ist der Weg, es zu tun, wenn Sie sicher sind, ihre Eins-zu-Eins-Beziehung. eine für den persönlichen Gebrauch und für sein Geschäft, usw ...

: zum Beispiel könnte ein Client mit zwei Rechnungsprofile da sein

Es ist nicht rückwärts, weil eine 0.59, oder einen Fremdschlüssel wirkt sich nicht auf die Reihenfolge der Schöpfung (in beide Sie das Profil zunächst erstellen können, oder den Client zuerst erstellen und verknüpfen sie dann).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top