ManyToManyField出现在模板中?

ManyToManyField出现在模板中?

问题描述:

我有03款书 - > target_readers,书有收藏。ManyToManyField出现在模板中?

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") 

在我的模板我喜欢这个能找到这本书

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

的target_readers但我不得到目标读者的任何结果。

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

+0

为什么downvote?这是一个措辞清晰,可回答的问题。从我+1。 – 2009-10-12 11:52:11

+0

PS - 为了记录,django模板基本上忽略了'不正确'的标签或者带有不可打印值的标签,所以不是在{{book.collection.target_readers.name}}上抛出错误,而是跳过它。我相信你可以通过在settings.py文件中设置TEMPLATE_DEBUG来告诉它抛出一个错误。更多信息:http://docs.djangoproject.com/en/dev/ref/settings/#template-debug – Jiaaro 2009-10-12 12:21:18

尝试:

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

target_readers不是一个单一的实体,它是一个列表(尽管其中一个可以只包含一个元素)。

+0

不能正常工作。 – kn3l 2009-10-13 02:31:57

+0

@python - 用什么方式? – 2009-10-13 05:17:34

+1

我认为它应该是:对于book.collection.target_readers.all中的读者 – 2011-10-30 15:03:29

该解决方案为我工作:

{% 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返回名称列表,因为您在0123_函数的Target_Readers类中返回self.name