0

あなたの提案が必要です。PlayListユーザーが追加できる場所songsmovies彼のという名前のモデルを作成していplaylistます。フィールド名を追加しましたplaylist_type。曲のプレイリストですか、それとも映画のプレイリストですか? それが曲のプレイリストである場合、彼はプレイリストに追加できませんmovies

Ok。ここで、ContenType を使用する必要がありますか、それとも、さらに 2 つの別個のモデルを作成する必要が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()
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.

これは、すぐに頭に浮かぶ欠点の 1 つにすぎません。それを回避するようにコーディング/設計することはできますが、このような制限をすぐに自分自身に課している場合は、将来的に失敗する可能性があります (新しいコンテンツ タイプをサポートしたい場合はどうなりますか?)。

于 2013-08-19T14:30:32.853 に答える