Django查询集。将输出转换为列表

时间:2012-10-04 08:47:53

标签: django django-models

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. 如何在quantity的{​​{1}}旁边添加此列表name? (例如:PC-3,Notebook-5)

2 个答案:

答案 0 :(得分:0)

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

要在Python shell级别quantity name旁边显示Item ,您可以在模型中使用__unicode__方法水平;如果ItemBoxItem之间存在一对一的关系,这应该很容易实现;回想一下,每次调用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()]