0
class Box(models.Model):
    owner = models.ForeignKey(User, related_name='user', verbose_name='Owner')
    name = models.CharField("Name", max_length=30)
    items = models.ManyToManyField('Item', through='BoxItem', blank=True, null=True)

class BoxItem(models.Model):
    item = models.ForeignKey('Item')
    box = models.ForeignKey('Box')
    quantity = models.IntegerField()

class Item(models.Model):
    name = models.CharField("Name Item", max_length=30)

In [1]: from project.app.models import *

In [2]: b = Box.objects.get(owner=1)

In [3]: b.items_all()

Out[4]: [<Item: PC>, <Item: Notebook>]
  1. 如何将此输出转换为列表?
  2. 如何在ofquantity旁边添加到此列表?(例如:PC - 3,笔记本电脑 - 5)nameItem
4

2 回答 2

0

在第 4 行中,结果b.items_all()实际上是一个QuerySet;您可以使用任何 QuerySet 的方法;对于大多数目的(包括列表访问),我通常直接使用 QuerySet。

为了在 Python shell 级别quantity的旁边显示,name您可以在模型级别使用该方法;如果您在和之间建立一对一的关系,这应该很容易实现;回想一下,每次调用该函数时,这都会导致额外的。Item __unicode__ItemBoxItemjoin__unicode__

于 2012-10-04T09:04:43.910 回答
0

怎么样的东西:

 b = Box.objects.get(owner=1)

 [('%s - %s' % (box_item.item.name, box_item.quantity)) for box_item in b.items_all()]
于 2012-10-04T09:24:04.557 回答