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>]
quantity
的{{1}}旁边添加此列表name
? (例如:PC-3,Notebook-5)答案 0 :(得分:0)
在第4行中,似乎b.items_all()
的结果实际上是QuerySet;您可以使用任何QuerySet的方法;对于大多数用途(包括 list 访问),我通常直接使用QuerySet。
要在Python shell级别quantity
的name
旁边显示Item
,您可以在模型中使用__unicode__
方法水平;如果Item
和BoxItem
之间存在一对一的关系,这应该很容易实现;回想一下,每次调用join
函数时,这都会导致额外的__unicode__
。
答案 1 :(得分:0)
如下:
b = Box.objects.get(owner=1)
[('%s - %s' % (box_item.item.name, box_item.quantity)) for box_item in b.items_all()]