python - 基于关系过滤记录 | 姜戈
问题描述
我有以下型号:
class PodcastPlatform(models.Model):
name = models.CharField(max_length = 60)
badge_path = models.FilePathField(path = settings.BADGES_DIR, unique = True)
class Meta:
ordering = ['name']
def __str__(self):
return self.name
class Podcast(models.Model):
name = models.CharField(max_length = 60)
description = models.CharField(max_length = 400)
created = models.DateTimeField(auto_now_add = True)
updated = models.DateTimeField(auto_now = True)
class Meta:
ordering = ['-created', '-updated']
def __str__(self):
return self.name
class PodcastLink(models.Model):
podcast_platform = models.ForeignKey(PodcastPlatform, on_delete = models.CASCADE)
podcast = models.ForeignKey(Podcast, on_delete = models.CASCADE)
url = models.URLField(max_length = 400, verbose_name = 'URL')
class Meta:
ordering = ['podcast_platform__name']
unique_together = ['podcast_platform', 'podcast']
def __str__(self):
return self.podcast_platform.name
def get_badge_url(self):
return static(re.search('img/.{0,}', self.podcast_platform.badge_path).group())
我想过滤Podcast
具有至少一个链接或相关模型实例的PodcastLink
模型实例。为此,我执行了以下操作:
Podcast.objects.filter(podcastlink__gte = 1)
返回以下查询集:
<QuerySet [<Podcast: Libero tenetur>, <Podcast: Libero tenetur>, <Podcast: Libero tenetur>, <Podcast: Assumenda iusto>, <Podcast: Assumenda iusto>, <Podcast: Assumenda iusto>, <Podcast: Assumenda iusto>, <Podcast: Explicabo>, <Podcast: Explicabo>, <Podcast: Explicabo>, <Podcast: Explicabo>, <Podcast: Explicabo>]>
我得到了预期的结果,但我注意到实例正在重复......尝试以下操作,并以同样的方式得到相同的结果(重复实例):
Podcast.objects.filter(Q(podcastlink__gte = 1))
为什么我会得到重复的实例?据我所知,这不应该发生......而且这很奇怪......
解决方案
您可以使用distinct()
来获取唯一实例。您可能还想过滤计数:
Podcast.objects.filter(podcastlink__count__gte = 1).distinct()
推荐阅读
- c# - 如何获取当前Windows登录用户全名而不是域名
- database - 烧瓶中的primary_key,可为空且唯一的意外参数?
- python - 让 pip 为位于本地的包找到正确的平台
- javascript - 如何在 Chrome 的网络选项卡中格式化 json?
- php - 使用存储库模式在 laravel 中使用“键”、“值”结构处理存储在数据库中的网站全局数据的最佳方法
- python - TypeError:ctypes 指针没有等效的 dtype
- vue.js - Vue:如何更改状态值并在其他页面中使用它并在启动时更改页面结构?
- c++ - 如何使用 PBC 库?
- google-cloud-platform - 在 Google Cloud Vertex AI 上使用客户处理程序进行部署
- c++ - FFMPEG 错误:解码 H.265 流时“帧中的第一个片段丢失”