2012-10-04 48 views
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. 如何添加到列表quantity旁边nameItem? (示例:PC-3,Notebook-5)

回答

0

约像什么:

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

[('%s - %s' % (box_item.item.name, box_item.quantity)) for box_item in b.items_all()] 
0

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

为了在Python中壳水平旁边Itemname所示quantity可以使用在模型水平__unicode__方法有;如果您在ItemBoxItem之间有一对一关系,则应该很容易实现;回想一下,每次调用__unicode__函数时都会导致额外的join