【发布时间】:2019-08-31 10:08:38
【问题描述】:
我在 Django 1.8 下。我有几个播放列表,每个播放列表都包含几个视频。其中一些视频的状态为已删除或错误。
我只想要包含状态为“在线”的视频的播放列表。
class Video(models.Model):
# Title of the video
title = models.CharField(max_length=100)
# Status of video (error, online, deleted)
status = models.CharField(max_length=20, default="online")
class UserPlaylist(models.Model):
# Name of the playlist
name = models.CharField(max_length=500, blank=True, null=True)
# Playlist owner
owner = models.ForeignKey(User)
# videos
videos = models.ManyToManyField(Video, null=False)
我尝试了没有成功:
UserPlaylist.objects.filter(videos__status="online")
UserPlaylist.objects.filter(videos__status="online").distinct()
有效但痛苦:
UserPlaylist.objects.exclude(videos__status='error').exclude(videos__status='deleted').distinct()
【问题讨论】:
-
这种尝试有什么问题?如果
UserPlaylist包含至少一个状态为online的视频,那么UserPlaylist将在该查询集中。也许这不是你想要的? -
@WillemVanOnsem 无论状态如何,它都会返回所有视频的列表。我尝试使用 distinct 将所有播放列表返回给我,但内部仍然有状态为在线以外的视频。我只想要一个仅包含播放列表的查询集,其中所有视频都“在线”。
-
我可以添加一个排除过滤器,但它看起来很不舒服。类似 .exclude(videos__status='error').exclude(videos__status='deleted')
-
虽然我认为可以解决(用这个答案),但你真的应该考虑升级。 2018 年 4 月,不再支持 Django-1.8。
标签: django-models many-to-many django-1.8