Django中__code是什么?name__code语法含义解析
Django里
__code和name__code到底是啥意思? 先讲Django ORM的核心规则:查询语句里的**双下划线__**是个特殊分隔符,主要用来做两件事:
- 跨关联模型查数据:如果某个字段是外键/一对一关联,用
关联字段__关联模型里的字段就能查询关联对象的属性 - 指定字段的匹配规则:比如
name__contains="张三"就是模糊匹配包含“张三”的name字段
你代码里的name__code
这大概率是第一种跨关联查询的场景:
- 你的
Hero模型里,name应该是个外键/一对一字段,关联了另一个模型(比如叫Name) - 这个关联的
Name模型里,存在一个叫code的字段(用来存储名称的编码、标识之类的内容) - 所以
Hero.objects.filter(name__code=name)的意思就是:筛选出所有关联的Name对象中code字段等于传入值的Hero记录
至于自定义code匹配规则的情况,需要开发者手动注册,新手代码里基本碰不到,不用优先考虑。
顺便提下你代码里的小问题
你这段循环逻辑有bug:
for name in names.split(self.names_separator): qs = Hero.objects.filter(name__code=name) return qs
循环第一次迭代就直接return了,只会处理分割后的第一个名称,后面的内容根本不会生效。如果要实现多名称的OR查询,得用Q对象组合:
from django.db.models import Q def get_queryset(self): names = self.request.query_params.get("name", None) if names: query = Q() for name in names.split(self.names_separator): query |= Q(name__code=name) return Hero.objects.filter(query) return Hero.objects.all()
内容的提问来源于stack exchange,提问作者Gthtpp
相关产品推荐
相关产品推荐

