django queryset过滤外键
Posted
技术标签:
【中文标题】django queryset过滤外键【英文标题】:django queryset filter foreignkey 【发布时间】:2018-01-05 17:35:52 【问题描述】:我在尝试对我的模型使用查询集过滤器时遇到问题。 它是组中帖子的控件。
这是我的代码:
class Post(models.Model):
title = models.CharField(max_length=120)
content = models.TextField()
class Group(models.Model):
title = models.CharField(max_length=200)
url = models.URLField(unique=True)
class Control(models.Model):
published = models.DateField(auto_now=False, auto_now_add=False)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
我正在尝试从标题为“title”的组中获取所有帖子:
queryset_list = Control.objects.filter(group__control="title")
我的模型可能是正确的,我是新手。 有什么帮助吗?
【问题讨论】:
为什么有Control
模型? Post
是否可以在一个组中发布而不在另一个组中发布?
是的,我可能有针对特定组的不同帖子。
【参考方案1】:
首先,您应该在Group
(docs) 上添加一个ManyToManyField
:
class Group(models.Model):
title = models.CharField(max_length=200)
url = models.URLField(unique=True)
posts = models.ManyToManyField('Post', through='Control')
其他两个模型保持不变,但现在您可以轻松抓取群组的帖子:
posts = Group.objects.get(title='some title').posts.all()
【讨论】:
我收到此错误:文件“Group
放在引号中:group = models.ForeignKey('Group', on_delete=models.CASCADE)
好吧,它也没有用。这是我的代码(没有多对多关系):bitbucket.org/renanbs/social-posts.
同样的错误还是别的什么?您是否查看了我在答案中链接到的文档?没有看到代码+错误很难提供帮助。
这是错误:可能是拼写错误?
queryset_list = Control.objects.filter(group__title="title")
# ^^^^^^
posts_title = queryset_list.values('post__title')
【讨论】:
以上是关于django queryset过滤外键的主要内容,如果未能解决你的问题,请参考以下文章
django model 条件过滤 queryset.filter(**condtions) 用法