2

我正在建立一个博客网站,并有关于类别和帖子的模型。帖子与类别具有多对多关系。

class Post(models.Model):
     categories = models.ManyToManyField(Category)

除了在模板的类别列表中我只想加载实际有帖子的类别之外,一切都运行良好。

如果一个类别是空的,我不想显示它,我试图在 Category 与 Post 中定义一个关系,以允许我使用类似{{ if category.posts }}. 目前在类别中使用另一个多对多字段目前正在给我一个额外的管理字段,我真的不想要或觉得不需要。

如何最好地驾驭这种关系,或者创造一个合适的关系?

干杯凯夫

4

2 回答 2

5

Django 自动在任何 ForeignKey 或 ManyToMany 关系的相关模型上创建一个字段。您可以通过 related_name 选项控制相关模型上的字段名称,如下所示:

class Post(models.Model):
 categories = models.ManyToManyField(Category,related_name='posts')

这样,您的方法无需任何其他字段即可工作。顺便说一句,如果你省略了related_name 参数,Django 将默认创建一个带有[field_name]_set 的参数。

于 2012-08-31T15:27:58.053 回答
0

您可以reverse relationsManyToMany字段上使用。在反向过滤器中,您必须使用相关的模型名称(如果您没有使用related_name属性)。因此,在您的问题中,您可以使用模型名称作为反向名称,例如:

{% if category.post %}

您还可以在视图中的过滤功能中使用它:

Category.objects.filter(post__isnull=False)

反向关系名称必须为小写。

在此处查看文档

于 2012-08-31T15:31:34.523 回答