>>> js=JsonModels.objects.filter(id=1).values("names").first()
>>> js
{'names': '1111'}
>>> type(js)
<class 'dict'>
>>> js=JsonModels.objects.filter(id=1).values("names").first()
>>> type(js)
<class 'dict'>
>>> js=JsonModels.objects.filter(id=1).values("names")
>>> type(js)
<class 'django.db.models.query.QuerySet'>
########## querydict
>>> bs=js=JsonModels.objects.filter(id=1)
>>> bs
<QuerySet [<JsonModels: JsonModels object (1)>]>
>>> bs.first()
<JsonModels: JsonModels object (1)>
>>> bo=bs.first()
>>> bo.names
'1111'
>>>
doc:
annotate()
¶
annotate
(* args,** kwargs)¶
QuerySet
使用提供的查询表达式列表注释中的每个对象。表达式可以是简单值,也可以是对模型(或任何相关模型)上字段的引用,也可以是针对与对象中的对象相关的对象计算出的聚合表达式(平均值,总和等)。QuerySet
。
的每个参数annotate()
都是一个注释,该注释将添加到QuerySet
返回的对象中。
Django提供的聚合功能在下面的“聚合功能”中进行了描述。
使用关键字参数指定的注释将使用关键字作为注释的别名。匿名参数将根据聚合函数的名称和要聚合的模型字段为其生成别名。只有引用单个字段的聚合表达式才可以是匿名参数。其他所有内容都必须是关键字参数。
例如,如果您要处理博客列表,则可能要确定每个博客中有多少个条目:
该Blog
模型本身并没有定义entry__count
属性,但是通过使用关键字参数指定聚合函数,您可以控制注释的名称:
有关聚合的深入讨论,请参阅有关聚合的主题指南。
https://docs.djangoproject.com/en/3.0/ref/models/querysets/