2016-04-15 29 views
0

内の項目のジャンゴ簡単に検索私はこれらのエンティティと多対多の関係を持っている:多対多の関係のモデル

class Playlist(models.Model): 
    videos = models.ManyToManyField("Video") 

class Video(models.Model): 
    pass 

私は、外国とのM2M関係を置き換えるために、第3のモデルを必要とします実際にプレイリストビデオにアクセスしてクエリする方法を変更する必要がなくても、エンティティのこの2つの鍵になるでしょうPlayList().videos、コードリファクタリング地獄に私たちを連れて行くでしょう。

これが第三の関係である:

class PlaylistVideos(models.Model): 
    playlist = models.ForeignKey('PlayList') 
    video = models.ForeignKey('Video') 
    new_field = models.IntegerField() 
    #... other stuff 

要約、私は簡単にアクセスするための別名属性特定のプレイリストの動画、任意の提案のようなものをご希望ですか?

答えて

1

あなたは、テーブルを使用することができます。

class Playlist(models.Model): 
    videos = models.ManyToManyField("Video", through="PlaylistVideos") 

これはhere文書化されています。 playlist.videosとしてビデオにアクセスすることはできますが、複数のクエリが生成されるため、以前よりも効率が悪くなります。これはHow do I make Django ManyToMany 'through' queries more efficient?で議論されています。追加のクエリがアプリケーションに大きな影響を与えるかどうかを判断する必要があります。 docsで説明したように、PlaylistVideosモデルを使用せずに新しい動画をプレイリストに追加することはできません。new_fieldの値を指定する必要があるためです。