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

Django如何在过滤器中显示@property字段bar的值?

问题解答

你没法直接用values()获取bar字段,原因很简单:bar是模型的@property属性,属于Python层面的动态计算值,并不存在于数据库中;而QuerySet.values()是直接生成SQL查询,只会提取数据库里实际存在的字段,不会触发Python属性的计算逻辑。

给你两种可行的解决办法:

方法一:先查实例再提取属性

先获取Foo的实例对象,再逐个提取foo_city和bar属性,转换成字典列表:

foos = Foo.objects.filter(foo_name="João")
result = [{"foo_city": foo.foo_city, "bar": foo.bar} for foo in foos]

方法二:用annotate将逻辑转成数据库查询

把bar的判断逻辑转换成数据库层面的Exists子查询,通过annotate添加为QuerySet的字段,这样就能用values()直接获取了,这种方式效率更高(计算在数据库完成):

from django.db.models import Exists, OuterRef

# 先annotate添加bar字段,再用values提取
result = Foo.objects.filter(foo_name="João").annotate(
    bar=Exists(
        FooAction.objects.filter(
            foo_id=OuterRef('pk'),
            action=Action.ACTION_NAME_PK
        )
    )
).values("foo_city", "bar")

内容的提问来源于stack exchange,提问作者Giovani Faleiros

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:40:34