让我们探讨下orm中related_name这个参数的功能
1.首先我们定义两个数据类
<code>class User(models.Model):
Name = models.CharField()
Role = models.ForeignKey(Role,on_delete=models.CASECADE)
class Role(models.Model):
Role_name = models.CharFIeld()/<code>
一个用户表,一个角色表
2.那么我们想知道Name为hah的同学属于什么角色,应该怎么样查呢?
<code>正向查找
user = User.objects.get(name=‘hah’)
user.Role.all()
通过这个我们可以找到hah所属的所有角色,比如他是一个manager/<code>
3.那么我们想知道角色为manager的都有哪些同学呢?
<code>反向查找
role = Role.objects.get(role_name=‘manager’)
role.user_set.all()
通过这两行代码就可以查出角色是manager的所有同学,其中user_set是class类的小写_set,
这是固定的查询用法,为什么呢,因为定义User类中外键的属性时候,没有用到related_name/<code>
那么我们重新定义一下User类
<code>class User(models.Model):
Name = models.CharField()
Role = models.ForeignKey(Role,on_delete=models.CASECADE,related_name=‘roleuser')/<code>
这个时候想知道manager角色包含那些同学的时候,我们可以这样来查找
<code>如果有related_name属性
role = Role.objects.get(name=‘manager’)
role.roleuser.all()
其实就是将user_set换成了上面我们自定义的related_name (rolesuer)/<code>
閱讀更多 桓藝恆 的文章