2009-10-12 33 views
1

我有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

回答

4

嘗試:

{% 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

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返回名稱列表,因爲您在0123_函數的Target_Readers類中返回self.name