2016-03-03 22 views
0

可以說,我的models.py看起來是這樣的:如何獲取可以在Django中迭代的ManyToManyField相關查詢集?

class Tag(models.Model): 
    name = models.CharField(max_length=50) 

class Review(models.Model): 
    text = models.TextField() 
    tags = models.ManyToManyField(Tag, related_name='review_tags', blank=True) 

在我views.py我得到一個查詢集是這樣的:

def index(request): 
    reviews = Review.objects.all() 
    return render(request, 'myapp/index.html', {'reviews' : reviews}) 
的index.html

現在,我正在做這樣的事情:

<div> 
    {% for review in reviews %} 
     <p>{{review.text}}</p> 
     {% for tag in review.tags %} 
      {{tag.name}} 
     {% endfor %} 
    {% endfor %} 
</div> 

顯然,這是行不通的。但是,它會讓您瞭解我正在嘗試執行的操作,即獲取特定審閱的標籤並僅顯示它們。我如何使用當前的設置執行此操作?

謝謝。

回答

4

我完全改寫了答案,因爲它得到upvotes和'接受答案',但是最初它是錯誤的。

所以正確的答案是呼叫{% for tag in review.tags.all %}遍歷所有與Review對象循環相關的Tag對象。

ADITION:如果你想首先遍歷雖然Tag對象,然後通過與Tag那麼你需要有鑑於關係Review對象迭代,返回Tag對象。

def index(request): 
    tags = Tag.objects.all() 
    return render(request, 'index.html', {'tags': tags}) 

而且在模板中,你需要使用related_nameManyToManyField

{% for tag in tags %} 
    <p>{{tag.name}}</p> 
    {% for review in tag.review_tags.all %} 
     {{ review.text }} 
    {% endfor %} 
{% endfor %} 
+0

這並不是出於某種原因進行迭代。我嘗試了{%for tag in review.review_tags.all%} {{tag.name}} {%endfor%},但沒有顯示任何內容。 –

+0

但是,{%for review.tags.all%中的標記}確實有效。謝謝。 –

+0

@TahmidKhanNafee謝謝你,我重新回答了答案,所以現在它有正確的信息。 –

相關問題