首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用所有对象创建django-queryset,但并不是所有对象都通过条件将许多字段关联到多个字段。

使用所有对象创建django-queryset,但并不是所有对象都通过条件将许多字段关联到多个字段。
EN

Stack Overflow用户
提问于 2022-07-22 18:34:54
回答 1查看 115关注 0票数 0
代码语言:javascript
复制
class Post(models.Model):
    text = models.TextField()


class Project(models.Model):
    name = models.CharField(max_length=60)
    description = models.CharField(max_length=500)

class Tag(models.Model):
    name = models.CharField(max_length=60)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)


class TaggedPost(models.Model):
    org_post = models.ForeignKey(Post, on_delete=models.CASCADE)
    tags = models.ManyToManyField(Tag)

假设我已经定义了上述模型。存在多个项目,它们都有多个标记。

例:

  • Project1 -> Tag1,Tag2
  • Project2 -> Tag3

并不是每个Post都有一个TaggedPost对象。例如:

  • Post1 -> no tag
  • Post2 ->TaggedPost -> Tag1
  • Post3 ->TaggedPost -> Tag2 Tag2

-> Tag2->Tag2->->Tag2->->->->->Tag2->->Tag2->->Tag2->->Tag2->->Tag2->Tag2->->Tag2en23 20,(以下是多个项目的标记)<代码>F 216

我现在要做的是一个查询集,它包含所有的帖子(也包括未标记的帖子),但只包含定义项目的标记。

qs.include_tags_of_project(Project1)的结果是:

  • Post1 -> no Tag2
  • Post2 -> Tag1
  • Post3 -> Tag2
  • Post4 Tag2F 226

qs.include_tags_of_project(Project2)的结果是:

  • Post1 ->无标签
  • Post2 ->无标签
  • Post3 ->无标签
  • Post4 -> Tag3F 236

有什么建议怎么处理吗?Thx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 20:37:01

首先,通过project.id (或project.name或description)获取所有帖子,第二,生成prefetch_related,以获取项目的所有标记。预取帮助您只获得标记,特别是项目。

代码语言:javascript
复制
Post.objects.filter(taggedposts__tags__project_id=project1.pk).prefetch_related(Prefetch('tags', queryset= Tag.objects.filter(project_id=project1.pk)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73084718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档