Django ORM之ManyToMany反向查詢報錯
阿新 • • 發佈:2020-12-13
一、建立資料表:其中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)