peewee 多对多 增删改查

1 创建多对多字段

class BaseModel(Model):
    class Meta:
        database = db


class Admin(BaseModel):
    '''管理员表'''
    email = CharField(verbose_name='邮箱', max_length=30)
    password = CharField(verbose_name='密码', max_length=12)
    name = CharField(verbose_name='姓名', max_length=10)
    creator_name = CharField(verbose_name='添加人姓名', max_length=10)
    create_time = DateTimeField(verbose_name='添加时间', default=datetime.now)
    is_deleted = BooleanField(verbose_name='是否被删除', default=False)
    deletor_name = CharField(verbose_name='删除人姓名', max_length=10, null=True)
    delete_time = DateTimeField(verbose_name='删除时间', null=True)

    class Meta:
        db_table = 'admin'



class Project(BaseModel):
    '''项目表'''
    project_name = CharField(verbose_name='项目名称', max_length=10, unique=True)  # 3-10位中英文字母组合
    product_name = CharField(verbose_name='产品名称', max_length=15, default='')  # 15位以下中英文字母组合
    creator_name = CharField(verbose_name='添加人姓名', max_length=10)
    create_time = DateTimeField(verbose_name='添加时间', default=datetime.now)
    is_deleted = BooleanField(verbose_name='是否被删除', default=False)
    deletor_name = CharField(verbose_name='删除人姓名', max_length=10, null=True)
    delete_time = DateTimeField(verbose_name='删除时间', null=True)
    admins = ManyToManyField(Admin, backref='projects')  # 一个管理员对应多个项目, 一个项目对应多个管理员

    class Meta:
        db_table = 'project'


class Module(BaseModel):
    '''模块表'''
    name = CharField(verbose_name='模块名', max_length=10)
    admins = ManyToManyField(Admin, backref='modules')  # 一个管理员对应多个模块, 一个模块对应多个管理员

    class Meta:
        db_table = 'module'

2 增加

with db.atomic():
    admin = Admin(name=name, email=email, password=password, creator_name=cur_user_name)
    admin.save()
    if proj_ids:
        projects = Project.select().where(Project.id.in_(proj_ids))
        admin.projects.add(projects)
    if module_ids:
        modules = Module.select().where(Module.id.in_(module_ids))
        admin.modules.add(modules)

3 删除

projects = Project.select().join.where(admin.id==admin_id)
admin.projects.remove(projects)  # 删除

4 修改

# 先删除项目权限, 再添加项目权限
admin.projects.clear()  # 删除所有
if proj_ids:
    projects = Project.select().where(Project.id.in_(proj_ids))
    admin.projects.add(projects)
# 先删除模块权限, 再添加模块权限
admin.modules.clear()
if module_ids:
    modules = Module.select().where(Module.id.in_(module_ids))
    admin.modules.add(modules)

5 查询

# 查询管理员表中的未删除记录
with db.atomic():
    admins = Admin.select().where(Admin.is_deleted == False)
    result = []
    for admin in admins:
        user_info = {
            'id': admin.id,
            'name': admin.name,
            'email': admin.email,
            'creatorName': admin.creator_name,
            'createTime': int(admin.create_time.timestamp()),
            'projectPermission': [{'id': project.id, 'name': project.project_name}
                                  for project in admin.projects],
            'modulePermission': [{'id': module.id, 'name': module.name}
                                 for module in admin.modules],
        }
        result.append(user_info)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值