Peewee ManyToMany 关系的中间 table 上的额外字段
Extra fields on intermediate table for Peewee ManyToMany relation
我正在尝试通过中介 table 与 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}, ...]
如何获取 playlist.movies 中的位置数据?
这应该有效:
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)
我正在尝试通过中介 table 与 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}, ...]
如何获取 playlist.movies 中的位置数据?
这应该有效:
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)