2012-08-31 134 views
2

我正在构建一个博客站点,并在类别和帖子方面有模型。帖子对类别有多对多的关系。Django双向关系

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

一切都来自一个事实,即在模板类别列表中,我只想要加载实际上有职位分类工作的罚款一边。

如果一个类别为空,我不想显示它,我试图在类别中定义一个关系以便发布以允许我使用类似{{ if category.posts }}的内容。目前在类别中使用另一个多对多字段目前在管理员中给了我一个额外的字段,我并不想要或不需要这种字段。

如何最好地导航这种关系,或创建一个合适的关系?

干杯 千电子伏

回答

0

您可以在ManyToMany字段使用reverse relations。在逆向过滤器中,您必须使用相关的型号名称(如果您未使用related_name属性)。在意见

{% if category.post %} 

您也可以使用这个在您的过滤功能:所以你的问题,你可以使用型号名称为像反向名称

Category.objects.filter(post__isnull=False) 

反向关系名必须是小写。

检查文档here

4

的Django上的任何ForeignKey的或多对多关系相关的示范自动创建的字段。您可以控制在通过这样的related_name期权相关的模型字段的名称:

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

这样一来,你的方法工作没有任何附加字段。顺便说一句,如果省略related_name参数,Django将默认创建一个[field_name] _set。