peewee один ко многим как коллекция - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу реализовать такую ​​модель с помощью Pewee / Python3. Есть пользователи, которым нужно публиковать сообщения на разных каналах. Таким образом, должно быть две таблицы: каналы и пользователи . В упрощенном виде это выглядит так:

каналы
PK channel_id: int
имя_канала: строка
название: строка

пользователи
PK user_id: int
имя_пользователя: строка
Каналы FK: список каналов

Полагаю, это должно выглядеть так:

class Channel(BaseModel):
    channel_id = PrimaryKeyField()
    user = ForeignKeyField(User, backref='user')
    channel_name = CharField()
    title = CharField()


class User(BaseModel):
    user_id = PrimaryKeyField()
    user_name = CharField()
    title = CharField()
    channels = ForeignKeyField(Channel, backref='channels', null=True)

И я хочу, чтобы он был доступен в виде общего списка Python, например

some_user.channels.add(sample_channel)
...
for channel in some_user.channels:
    ...

и др. Но я не могу использовать User.channels в качестве коллекции. Как я могу реализовать это с помощью Peewee?

1 Ответ

0 голосов
/ 30 апреля 2018

Это отношение многих ко многим:

class Channel(Model):
    name = CharField()

class User(Model):
    username = CharField()

class UserChannel(Model):
    user = ForeignKeyField(User, backref='user_channels')
    channel = ForeignKeyField(Channel, backref='channel_users')

# get channels for a user named 'huey'
huey_channels = (Channel
                 .select()
                 .join(UserChannel)
                 .join(User)
                 .where(User.username == 'huey'))
...