关于模型的建议

时间:2013-08-17 19:18:11

标签: django django-models

我需要你的建议。我正在创建一个名为PlayList的模型,用户可以在songs中添加moviesplaylist。  我添加了一个字段名称playlist_type。它会询问用户是歌曲播放列表还是电影播放列表?如果是歌曲播放列表,则无法在播放列表中添加movies

确定。现在我应该使用ContenType还是应该创建另外两个单独的模型PlayListSongPlayListMovies。你有什么建议?感谢

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()

1 个答案:

答案 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.

这只是我想到的一个缺点。你可以围绕它进行编码/设计 - 但是如果你立即对自己施加这样的限制,那么你就会为自己的失败做好准备(当你想支持新的内容类型时会发生什么?)。