我有以下型号:
class LibraryEntry(models.Model): player = models.ForeignKey(Player) player_lib_song_id = models.IntegerField() title = models.CharField(max_length=200) artist = models.CharField(max_length=200) album = models.CharField(max_length=200) track = models.IntegerField() genre = models.CharField(max_length=50) duration = models.IntegerField() is_deleted = models.BooleanField(default=False) class Meta: unique_together = ("player","player_lib_song_id") def __unicode__(self): return "Library Entry " + str(self.player_lib_song_id) + ": " + self.title class BannedSong(models.Model): lib_entry = models.ForeignKey(LibraryEntry) def __unicode__(self): return "Banned Library Entry " + str(self.lib_entry.title)
我想做这样的查询:
banned_songs = BannedSong.objects.filter(lib_entry__player=activePlayer) available_songs = LibraryEntry.objects.filter(player=activePlayer).exclude(banned_songs)
基本上如果一首歌被禁止,我想把它从我的可用歌曲中排除.有没有办法在Django中这样做?
解决方法
banned_song_ids = (BannedSong.objects.filter(lib_entry__player=activePlayer) .values_list('lib_entry',flat=True)) available_songs = (LibraryEntry.objects.filter(player=activePlayer) .exclude('id__in' = banned_song_ids))
替代方案是:
available_songs = (LibraryEntry.objects.filter(player=activePlayer) .filter(bannedsong__isnull = True))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。