Pergunta

Meu aplicativo possui clientes com um único perfil de cobrança.

Estou imaginando meu aplicativo tendo um "Cliente"Modelo com um atributo chamado"Billing_profile"O que referenciaria outro modelo chamado"BillingProfile". Em vez de definir"BillingProfile"Com uma chave estrangeira de volta para" cliente "(ou seja,"cliente = models.foreignKey (cliente)"), Eu estava pensando que, como haverá apenas um perfil de cobrança para cada cliente, eu poderia simplesmente usar um campo individual. Isso parece lógico para fazer, ou parece para trás (então eu teria que Crie um BillingProfile antes de estabelecer um cliente). Existe uma boa maneira de fazer isso em relação ao meu paradigma de entendê -lo?

Foi útil?

Solução 2

Eu descobri.

Um OnetoOnefield () pode ser procurado nos dois lados através do método de atributo simples.

Exemplo:

Modelos:

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


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

Agora eu posso fazer qualquer um deles:

spam_client.billingprofile  # returns related BillingProfile Instance

ou

spam_billingprofile.client  # returns related Client instance

Isso significa que não preciso instanciar o BillingProfile até estar pronto, mas ainda tenho os benefícios que teria se o cliente tivesse um atributo BillingProfile, em vez de o contrário.

Em outras palavras: eu estava pensando em tudo para trás antes, mas não muito para trás.

Outras dicas

Essa é a maneira de fazê -lo, se você tem certeza de que é um relacionamento único. Por exemplo, poderia haver um cliente com 2 perfis de cobrança: um para uso pessoal e para seus negócios, etc.

Não é atrasado, porque usar um a um ou usar uma chave estrangeira não afeta a ordem da criação (em ambos você pode criar o perfil primeiro ou criar o cliente primeiro e depois vinculá -los).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top