peewee:多对多,设置多个ManyToManyField()

项目中需要一张表与多张表建立多对多的关系,因此就需要多个ManyToManyFild,下面提供一段测试程序供大家进行参考。

from peewee import *

database = SqliteDatabase('db.sqlite3')
class BaseModel(Model):
    class Meta:
        database = database

class User(BaseModel):
    username = CharField(unique=True)
    password = CharField()

TeacherThroughDeferred = DeferredThroughModel()
StudentThroughDeferred = DeferredThroughModel()

class Team(BaseModel):
    title = CharField()
    teachers = ManyToManyField(User, backref='lead_teams', through_model=TeacherThroughDeferred)
    students = ManyToManyField(User, backref='join_teams', through_model=StudentThroughDeferred)

class TeacherThrough(BaseModel):
    team = ForeignKeyField(Team)
    user = ForeignKeyField(User)

TeacherThroughDeferred.set_model(TeacherThrough)

class StudentThrough(BaseModel):
    team = ForeignKeyField(Team)
    user = ForeignKeyField(User)

StudentThroughDeferred.set_model(StudentThrough)

database.create_tables([
    User, Team,
    TeacherThrough,
    StudentThrough,
])

for k in range(10):
    usr = User()
    usr.username = f'Alex_{k}'
    usr.password = 'dsklf'
    try:
        usr.save()
    except:
        pass
team = Team()
team.title = "test"
team.save()
team.teachers.add([
    User.get(User.username == 'Alex_0'),
    User.get(User.username == 'Alex_1'),
    User.get(User.username == 'Alex_2'),
])
team.students.add([
    User.get(User.username == 'Alex_3'),
    User.get(User.username == 'Alex_4'),
    User.get(User.username == 'Alex_5'),
    User.get(User.username == 'Alex_6')
])
team.save()
for each in User.get(User.username == 'Alex_0').lead_teams:
    print(each)
print('-' * 20)
for each in User.get(User.username == 'Alex_3').join_teams:
    print(each)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值