一、创建数据表:其中UserRole_MTM是多对多关系表
class Role(models.Model): title=models.CharField(verbose_name='角色名称',max_length=32) permission=models.ManyToManyField(verbose_name='拥有的所有权限',to='Permission',blank=True) # def __str__(self): # return self.title class UserInfo(models.Model): eid = models.CharField(verbose_name='用户编码', max_length=7,unique=True) username=models.CharField(verbose_name='用户名',max_length=32) email=models.CharField(verbose_name='邮箱',max_length=32) password = models.CharField(verbose_name='密码', max_length=64) roles=models.ManyToManyField( # 通过已经创建的关系表创建多对多关系。 verbose_name='拥有的所有角色', to='Role', through='UserRole_MTM', through_fields=('ug_user','ug_role'), blank=True, symmetrical=False, ) class UserRole_MTM(models.Model): ug_user=models.ForeignKey('UserInfo') ug_role=models.ForeignKey('Role') class Meta: unique_together = [ ('ug_user','ug_role'), ]
二、在views.py中使用_set进行反向查询Role表中的title数据
class user_role_ORM(View): def get(self,request): result=models.UserInfo.objects.filter(eid='E100002').first() mm=result.userrole_mtm_set.all() for row in mm: print(row.ug_role_id.title) return render(request,'app01_rbac_ORM.html',{'obj':obj})
由于使用row.ug_role_id.title进行反向查询错误语法,出现报错
File "D:\views\business_logic.py", line 23, in get print(row.ug_role_id.title) AttributeError: 'int' object has no attribute 'title'
所以在反向查询时,不能直接使用数据表的字段名,而要使用在models.py中定义关系时的变量名来构造查询条件
print(row.ug_role.title)