Джанго: Как определить модельные отношения для достижения следующего ?: - PullRequest
1 голос
/ 23 декабря 2009

В моем приложении есть клиенты, каждый из которых имеет один профиль выставления счетов.

Я предполагаю, что мое приложение имеет модель " Client " с атрибутом " billing_profile ", который будет ссылаться на другую модель с именем " BillingProfile ". Вместо того, чтобы определять « BillingProfile » с внешним ключом обратно к «Клиенту» (т. Е. « client = models.ForeignKey (Client) »), я подумал, что, поскольку быть одним платежным профилем для каждого клиента, чтобы я мог просто использовать однозначное поле. Кажется ли это логичным, или это кажется задом наперед (Тогда я должен был бы создать BillingProfile, прежде чем когда-либо устанавливать клиента). Есть ли хороший способ сделать это по сравнению с моей парадигмой понимания?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Это способ сделать это, если вы уверены, что это отношения один на один. например, может ли быть клиент с двумя платежными профилями: один для личного пользования и для его бизнеса, & c ...

Это не наоборот, потому что использование одного к одному или использование внешнего ключа не влияет на порядок создания (в обоих случаях вы можете сначала создать профиль или сначала создать клиент, а затем связать их).

1 голос
/ 24 декабря 2009

Я понял это.

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 до тех пор, пока я не буду готов, но у меня все еще есть преимущества, которые я получил бы, если бы у клиента был атрибут billingprofile, а не наоборот.

Другими словами: я думал обо всем этом задом наперед, но не слишком задом наперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...