gpt4 book ai didi

python - 在 Django 中,如何获取一个模型的所有实例,这些实例具有使用 ForeignKey 字段附加到它的相关模型的其他实例?

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:09 24 4
gpt4 key购买 nike

我正在尝试编写一个查询来检索至少有一个 post 附加到它的所有类别。换句话说,我想“排除”任何没有任何帖子的类别。

这些是我的CategoryPost 模型:

class Category(models.Model):
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique=True)


class Post(models.Model):
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique=True)
body = models.TextField()
category = models.ForeignKey(Category, blank=True, default="")

这是我在查询中使用的代码,目前它获取所有类别,即使没有“附加”到它:

categories = Category.objects.all()

我想要的是这样的:

categories = Category.objects.filter(
# Only ones that have at least one Post that has it's 'category' field set to it.
)

我已经搜索了文档和其他任何地方,但我找不到解决方案。

请告诉我如何做到这一点。

最佳答案

您可以使用以下查询:

categories = Category.objects.filter(post__isnull=False).distinct()

这将获取所有 post 不为空的类别。因为,一个类别可能有多个帖子,您将获得具有相同 ID 的重复实例。使用 distinct 删除重复的类别。

请注意,distinct(*fields) 是特定于 postgresql 的。如果您使用不同的数据库,只需使用 distinct()

关于python - 在 Django 中,如何获取一个模型的所有实例,这些实例具有使用 ForeignKey 字段附加到它的相关模型的其他实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43186876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com