ManyToManyField存在于模板中?

时间:2009-10-12 11:33:51

标签: django django-templates

我有03个模型书 - > target_readers和book有收集。

class Book(models.Model):
    def __unicode__(self):
        return "%s (%s)" % (self.title, self.reference)
    reference = models.CharField(max_length=100)
    title = models.CharField(max_length=200)
    collection = models.ForeignKey(Collection)

class Collection(models.Model):
    def __unicode__(self):
        return self.name
                                       )
    name = models.CharField(max_length=200)
    target_readers = models.ManyToManyField(Target_Readers, blank=True, null=True)

class Target_Readers(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length=200, verbose_name="target reader")

在我的模板中,我喜欢这样来获取本书的target_readers

{% for book in books %}
   {{ book.title }}
   {{ book.public_price }}
   {{ book.collection.target_readers.name }}

但我没有得到目标读者的任何结果。

任何人都知道我该怎么做?

2 个答案:

答案 0 :(得分:4)

尝试:

{% for book in books %}
   {{ book.title }}
   {{ book.public_price }}
   {% for reader in book.collection.target_readers %}
       {{ reader.name }}
   {% endfor %}
{% endfor %}

target_readers不是单个实体,它是一个列表(虽然可能只包含一个元素)。

答案 1 :(得分:0)

这个解决方案对我有用:

{% for book in books %}
    {{ book.title }}
    {{ book.public_price }}
    {{ book.collection.target_readers.all|join:", " }}
{% endfor %}

因此book.collection.target_readers.all会返回目标读者名称列表,join:", "是一个使用“,”连接列表项的过滤器。

注意:在此示例中,book.collection.target_readers.all返回名称列表,因为您在Target_Readers类的self.name函数中返回__unicode__(self)