【发布时间】:2012-04-28 07:17:07
【问题描述】:
我有以下型号:
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 中做到这一点?
【问题讨论】:
-
您不能将“is_banned”设为您的 LibraryEntry 模型的布尔字段吗?
-
是的,但与没有被禁止的歌曲相比,实际上很少有歌曲会被禁止。我想添加一个布尔字段,它在大多数情况下只会是一个值是错误的形式。
-
我不会这么说,但我想这是一个品味问题。
-
我不明白为什么
BannedSong有一个ForeignKey- 如果你真的希望BannedSong成为一个单独的模型,它不应该是OneToOneField(它应该'不是)?
标签: django django-models django-queryset