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の横にあるこのリストに追加するにはどうすればよいnameですItemか? (例:PC-3、ノート-5)
4

2 に答える 2

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 に答える
0

4 行目では、 の結果b.items_all()が実際にはQuerySetであるように見えます。QuerySet の任意のメソッドを使用できます。ほとんどの目的 (リストアクセスを含む) で、通常は QuerySet を直接使用します。

Python シェル レベルで of のquantity横に表示するには、モデル レベルでメソッドを使用できます。と の間に1 対 1 の関係がある場合、これは簡単に実現できます。これにより、関数が呼び出されるたびに追加の結果になることを思い出してください。nameItem __unicode__ItemBoxItemjoin__unicode__

于 2012-10-04T09:04:43.910 に答える