0

我需要你的建议。我正在创建一个名为PlayListwhere user's can addsongsmoviesin his的模型playlist。我添加了一个字段名称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()
4

1 回答 1

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.

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

于 2013-08-19T14:30:32.853 回答