You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:37:34