Django Как использовать ManyRelatedManager - PullRequest
5 голосов
/ 25 мая 2011

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

Я хотел бы написать связующее приложение, которое будет соединяться с определенными моделями через ManyToManyField, например:

В приложении клиенты,

class Customer(models.Model):
    ...

В приложении пиццы,

class Pizza(models.Model):
    ...

Тогда я хотел бы написать приложение для продажи пиццы, которое будет выглядеть так:

class PizzaSold(models.Model):
    customer = models.ForeignKey(related_name='pizzas')
    pizza = models.ForeignKey(related_name='customers')

    objects = ManyRelatedManager()

чтобы я мог получить доступ к пицце от клиентов напрямую

 pizza = Pizza.objects.all()[0]
 for customer in pizza.customers:
     #Do something cool

и клиенты из пиццы в этом новом приложении.

Как я могу это сделать?

1 Ответ

4 голосов
/ 25 мая 2011

Что, если вы использовали ManyToManyField для моделирования пиццы, продаваемой внутри модели клиента?

class Customer(models.Model):
   pizzas_bought = models.ManyToManyField(Pizza)

Кроме того, если вы хотите добавить дополнительные данные для своего клиента -> отношения с пиццей, укажитеОтображение класса с помощью через параметр :

class Customer(models.Model):
   pizzas_bought = models.ManyToManyField(Pizza, through=PizzaSold)

class PizzaSold(models.Model):
   customer = models.ForeignKey(Pizza)
   pizza = models.ForeignKey(Customer)

Одновременно с использованием related_name должно прекрасно работать и с ManyToManyFields.Например:

class Customer(models.Model):
   pizzas_bought = models.ManyToManyField(related_name='pizzas')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...