Python 3.x Peewee-Manytomy关系中间表上的额外字段
我试图通过Peewee 3.2.2中带有额外列的中间表建立多个关系,如下所示: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
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上的出色工作。这当然是我的意见。“多对多”字段最适合于非常简单的关系。我从不亲自使用它。