получить значение из множества полей в модели Джанго? - PullRequest
0 голосов
/ 17 января 2010

У меня к столам

class Book(models.Model):
    title = models.CharField(max_length=200)        
    authors = models.ManyToManyField(Individual, related_name="author_for", blank=True, null=True)
    illustrators = models.ManyToManyField(Individual, related_name="illustrator_for", blank=True, null=True)

class Unitary_Sale(models.Model):        
            book = models.ForeignKey(Book)
            quantity = models.IntegerField()
            unit_price = models.DecimalField(max_digits=15, decimal_places=3)
            sale = models.ForeignKey(Sale)

Как отчет может быть продан автором или иллюстратором?

by_author = {}
   for unit_sale in Unitary_sale.objects.all():
        author = unit_sale.book.authors
        by_authors[author] =  (unit_sale.quantity, unit_sale.quantity *unit_sale.unit_price)


Author   Qty  Amount($)
A        2     20
A&B      3     30

*** у одной книги много авторов

Ответы [ 2 ]

2 голосов
/ 17 января 2010

Просто помните о количестве запросов к базе данных, которые выполняются под капотом. Я был загипнотизирован простым способом доступа и перебора связей дБ в моем коде, что привело к ~ 900 дБ запросам на одну страницу.

1 голос
/ 17 января 2010

авторов много-ко-многим, так что вам нужно вложить еще один цикл. Объект author, который вы создали как список, например:

for unit_sale in Unitary_sale.objects.all():
    for x in author:
       by_authors[x] = ....

Редактировать : на самом деле я заметил ошибку в том, как вы создаете author. Должно быть:

author = unit_sale.book.authors.all()

Затем вы можете использовать цикл for для перебора всех объектов Author, как указано выше.

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