2017-07-20 90 views
0

我有一個代表文章的Django類。在一個或多個其他文章有時一文的評論,我已經表示如下使用遞歸許多一對多的關係,在這個類的關係:如何從遞歸多對多關係中檢索Django對象?

class Article(models.Model): 
    comments_on = models.ManyToManyField('self', blank=True) 

我認爲,我已經成功地相關的文章彼此在管理界面中通過在comments_on字段中選擇多個文章。假設一篇文章(id1)評論其他兩篇文章(id2和id3)。我不知道如何訪問id1的comments_on屬性,以便id2和id3出現在我的Django模板中。

我想:

{{ [instance of Article object].comments_on }} 

,但我得到的是:

[name of my app].Article.None 

我想知道(1)如何訪問此屬性,讓它顯示? (2)我如何一次訪問其中一篇相關文章?例如,如果在id2和id3上都有id1註釋,我怎樣才能顯示id2或id3?

+1

好comments_on是M2M領域,所以你不得不在從'Article.comments_on.all(返回的查詢集for循環做)'和施展屬性。 –

+0

謝謝。我試圖通過myvariable = Article.comments_on.all()將它分配給我的函數中的一個變量,然後我嘗試通過我的html文件中的myvariable進行循環,但是我收到了一個AttributeError,它表示:'ManyToManyDescriptor'對象沒有屬性'all' – henrich

+1

首先,'Article'是模型的類名。 'Article.comments_on'會返回'ManyToManyDescriptor'函數。 您只需調用'[實例文章] .comments_on.all()'來獲取查詢集。 – zaidfazil

回答

0

感謝您的所有建議。根據您的意見,我解決了這個問題,如下所示:

在views.py,我寫道:

myvariable = Article.objects.all() 

,然後將它傳遞給語境詞典,所以我可以渲染網頁中的變量。

在模板中,我寫道:

{% if item.comments_on.all.count == 1 %} 
    {% for key in item.commented_on_by.all %} 
     <strong>This study criticized:</strong> <a href="#">{{ key }}</a> 
    {% endfor %} 
{% endif%} 

    {% if item.comments_on.all.count > 1 %} 
    <strong>This study criticized:</strong> 
    <ul> 
     {% for key in item.comments_on.all %} 
     <li><a href="#">{{ key }}</a></li> 
     {% endfor %} 
    </ul> 
    {% endif%}