Python 3.x Peewee-Manytomy关系中间表上的额外字段

Python 3.x Peewee-Manytomy关系中间表上的额外字段,python-3.x,orm,peewee,Python 3.x,Orm,Peewee,我试图通过Peewee 3.2.2中带有额外列的中间表建立多个关系,如下所示: ThroughDeferred = DeferredThroughModel() class Playlist(BaseModel): ... movies = ManyToManyField(Movie, backref='playlists', through_model=ThroughDeferred) class Movie(BaseModel): name = CharField

我试图通过Peewee 3.2.2中带有额外列的中间表建立多个关系,如下所示:

ThroughDeferred = DeferredThroughModel()

class Playlist(BaseModel):
    ...
    movies = ManyToManyField(Movie, backref='playlists', through_model=ThroughDeferred)

class Movie(BaseModel):
    name = CharField(max_length=100)

class PlaylistMovie(BaseModel):
    playlist = ForeignKeyField(column_name='playlist_id', field='id', model=Playlist)
    movie = ForeignKeyField(column_name='movie_id', field='id', model=Movie)
    position = PositiveSmallIntegerField(default=1)

    class Meta:
        table_name = 'playlist_movie_relation'

ThroughDeferred.set_model(PlaylistMovie)
但是,经过查询,我得到的只是没有位置的相关电影数据列表

list(playlist.movies.dicts()) 
> [{name: 'blah', id: 3}, ...]
如何获取播放列表中的位置数据。电影?

这应该可以:

query = (Movie
         .select(Movie, PlaylistMovie.position)
         .join(PlaylistMovie)
         .where(PlaylistMovie.playlist == playlist)
         .order_by(PlaylistMovie.position))

for movie in query:
    print(movie.name, movie.playlistmovie.position)

所以只要有额外的字段,中间表就应该通过显式连接而不是通过模型声明来使用,对吗?顺便说一下,谢谢你在peewee上的出色工作。这当然是我的意见。“多对多”字段最适合于非常简单的关系。我从不亲自使用它。