我需要你的建议。我正在创建一个名为PlayList
的模型,用户可以在songs
中添加movies
和playlist
。
我添加了一个字段名称playlist_type
。它会询问用户是歌曲播放列表还是电影播放列表?如果是歌曲播放列表,则无法在播放列表中添加movies
。
确定。现在我应该使用ContenType还是应该创建另外两个单独的模型PlayListSong
和PlayListMovies
。你有什么建议?感谢
class PlayList(TimeStampedModel):
SONG_PLAYLIST = 1
MOVIES_PLAYLIST = 2
PLAYLIST_CHOICES = (
(SONG_PLAYLIST, 'Songs'),
(MOVIES_PLAYLIST, 'Movies'),
)
name = models.CharField(_('PlayList Name'), max_length=100)
user = models.ForeignKey(User)
playlist_type = models.IntegerField(choices=PLAYLIST_CHOICES)
class PlayListContentType(TimeStampedModel):
playlist = models.ForeignKey(PlayList)
content_type = models.ForeignKey(ContentType, related_name="likes")
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
答案 0 :(得分:0)
我认为你最好不要创建从PlayList模型继承的单独模型PlayListSong和PlayListMovies。
如果您使用PlayListContentType模型,您可能必须在您定义的每个函数中执行if / else检查,该函数首先确定您在处理之前正在处理的content_type ...
...对于一个非常简单的例子:
class PlayListContentType(TimeStampledModel):
// Attributes here.
def get_favorite_movie(self):
if self.content_type.name == "movie":
// Get movie from playlist.
else:
// Return error message/exception/etc.
这只是我想到的一个缺点。你可以围绕它进行编码/设计 - 但是如果你立即对自己施加这样的限制,那么你就会为自己的失败做好准备(当你想支持新的内容类型时会发生什么?)。