Django: Comment définir une relation de modèle pour atteindre les objectifs suivants ?:
-
21-09-2019 - |
Question
Mon application a des clients qui ont chacun un profil de facturation.
Je suis mon application envisager d'avoir un " Client " modèle avec un attribut appelé " billing_profile " qui référence un autre modèle appelé « BillingProfile ». Plutôt que de définir " BillingProfile " avec une clé étrangère de retour à "Client" (par exemple, " = client models.ForeignKey (client) "), je pensais que depuis là ne sera qu'un profil de facturation pour chaque client que je pourrais simplement utiliser un à un champ à la place. Cela vous semble logique de le faire, ou semble t-il vers l'arrière (alors je dois créer un BillingProfile avant même la création d'un client). Y at-il une bonne façon de le faire par rapport à mon paradigme de la comprendre?
La solution 2
Je compris.
A OneToOneField () peut être consultée dans les deux sens par la méthode simple attribut.
Exemple:
Modèles:
class Client(models.Model):
... stuff ...
class BillingProfile(models.Model):
client = models.OneToOneField('Client')
... stuff ...
Maintenant, je peux faire l'une de ces:
spam_client.billingprofile # returns related BillingProfile Instance
ou
spam_billingprofile.client # returns related Client instance
Cela signifie que je n'ai pas instancier le BillingProfile jusqu'à ce que je suis prêt, mais je dois encore les avantages que j'aurais si le client avait un attribut billingprofile au lieu de l'inverse.
En d'autres termes:. Je pensais tout à l'envers avant, mais pas trop en arrière
Autres conseils
C'est la façon de le faire, si vous êtes certain est un relation biunivoque. par exemple, pourrait-il y avoir un client avec 2 profils de facturation: un pour un usage personnel et pour son entreprise, etc. ...
Il est pas en arrière, car en utilisant un à un, ou à l'aide d'une clé étrangère n'affecte pas l'ordre de la création (à la fois, vous pouvez créer le profil d'abord, ou créer le client d'abord, puis de les relier).