Pregunta

Mi aplicación tiene clientes que cada uno tiene un único perfil de facturación.

Me estoy imaginando mi aplicación tener un " Cliente " modelo con un atributo llamado " billing_profile ", que haría referencia a otro modelo llamado " BillingProfile ". En lugar de definir " BillingProfile " con una clave externa de nuevo a "Cliente" (es decir, " cliente = models.ForeignKey (Cliente) "), estaba pensando que desde allí sólo habrá un perfil de facturación para cada cliente que yo podría simplemente utilizar un campo de uno-a-uno en su lugar. ¿Esto parece lógico hacer, o qué parece al revés (Luego tendría que crear un BillingProfile incluso antes de establecer un cliente). ¿Hay una buena manera de hacer esto frente a mi paradigma de entenderlo?

¿Fue útil?

Solución 2

lo he descubierto.

A OneToOneField () se puede consultar en ambos sentidos a través del método de atributo simple.

Ejemplo:

Modelos:

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


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

Ahora que pueda hacer cualquiera de los siguientes:

spam_client.billingprofile  # returns related BillingProfile Instance

o

spam_billingprofile.client  # returns related Client instance

Esto significa que no tiene que crear una instancia del BillingProfile hasta que esté listo, pero todavía tengo los beneficios que tendría si el cliente tenía un atributo billingprofile en lugar de al revés.

En otras palabras:. Estaba pensando en todo al revés antes, pero no demasiado hacia atrás

Otros consejos

Esa es la manera de hacerlo, si está seguro de su una relación de uno a uno. por ejemplo, puede haber un cliente con 2 perfiles de facturación: una para uso personal, y por su negocio, etc. ...

No es al revés, porque el uso de un uno a uno, o el uso de una clave externa no afecta al orden de la creación (en tanto se puede crear el perfil en primer lugar, o crear el cliente primero, y luego enlazarlas).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top