2017-07-20 88 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%}