【发布时间】:2017-07-20 01:21:29
【问题描述】:
我有一个代表文章的 Django 类。有时一篇文章会与一篇或多篇其他文章发生冲突,我在课堂上使用递归多对多关系表示这种关系,如下所示:
class Article(models.Model):
comments_on = models.ManyToManyField('self', blank=True)
我认为通过在 cmets_on 字段中选择多篇文章,我已经在管理界面中成功地将文章相互关联了。假设一篇文章 (id1) 与另外两篇文章 (id2 和 id3) 发生冲突。我不知道如何访问 id1 的 cmets_on 属性,以便 id2 和 id3 出现在我的 Django 模板中。
我试过了:
{{ [instance of Article object].comments_on }}
但我得到的只是:
[name of my app].Article.None
我想知道 (1) 如何访问此属性并使其显示? (2) 我如何一次访问其中一篇相关文章?例如,如果 id2 和 id3 上都有 id1 cmets,我如何只显示 id2 或只显示 id3?
【问题讨论】:
-
cmets_on 是一个 M2M 字段,因此您必须对来自
Article.comments_on.all()的返回查询集执行 for 循环并显示它们的属性。 -
谢谢。我尝试使用 myvariable = Article.cmets_on.all() 将其分配给我在views.py中的函数中的一个变量,然后我尝试遍历我的html文件中的myvariable,但我收到一个AttributeError,上面写着:'ManyToManyDescriptor'对象没有“全部”属性
-
首先
Article是模型的类名。Article.comments_on将返回ManyToManyDescriptor函数。您只需调用[instance of Article].comments_on.all()即可获取查询集。
标签: python django recursion many-to-many