从django模型中的manytomany字段中获取价值?

时间:2010-01-17 06:26:41

标签: django

我有桌子

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 个答案:

答案 0 :(得分:2)

请注意在引擎盖下执行的数据库查询的数量。我在代码中访问和迭代数据库关系的简单方法被催眠了,这导致每一个页面有大约900个数据库的查询。

答案 1 :(得分:1)

作者是多对多的,所以你需要嵌套另一个循环。您列出的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对象,如上所述。