为了账号安全,请及时绑定邮箱和手机立即绑定

注释 Django 查询集不使用向后外键返回注释。使用geodjango

注释 Django 查询集不使用向后外键返回注释。使用geodjango

慕容森 2022-10-11 21:17:56
我有一个神秘的问题,注释没有显示在使用反向外键的查询集上。使用 Django 2.2。楷模from django.contrib.gis.db import modelsclass Hexgrid_10km2(models.Model):    polygon = gismodels.MultiPolygonField(srid=4326)class Reply(models.Model):    user = models.ForeignKey(User, on_delete=models.CASCADE)    reply_date = models.DateTimeField()    ability = models.FloatField(default = 0)    hexgrid_10km2 = models.ForeignKey(Hexgrid_10km2, related_name='replies', on_delete=models.CASCADE, null=True, blank=True)问题我首先将 Hexgrid_10km2 过滤为仅包含回复的那些:most_recent = Reply.objects.filter(    reply_date=Subquery(        (Reply.objects            .filter(user=OuterRef('user'))            .values('user')            .annotate(most_recent=Max('reply_date'))            .values('reply_date')[:1]        )    ))hex_qs = Hexgrid_10km2.objects.filter(replies__in=most_recent)>>> hex_qs<QuerySet [<Hexgrid_10km2: Hexgrid_10km2 object (197028)>, <Hexgrid_10km2: Hexgrid_10km2 object (197028)>]>我检查它们是否确实包含回复:>>> hex_qs.aggregate(Sum('replies__ability')){'replies__ability__sum': 2.0}现在谜...>>> hex_qs.annotate(avg_ability=Avg('replies__ability'))<QuerySet [<Hexgrid_10km2: Hexgrid_10km2 object (197028)>]>注释在哪里?它与我用来构建模型的 geodjango 有关吗?我感觉自己像个傻瓜。非常感谢您的帮助,因为我完全卡住了。
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

如果您随后将属性添加到从.annotate(..)查询集中产生的对象。

当 Django 打印一个查询集时,它使用repr(..)来打印(第一个)对象。所以这意味着除非__repr__方法(或__str__方法)被实现为打印属性,否则它不会显示出来。

例如,您可以使用以下命令访问第一个对象的注释:

hex_qs[0].avg_ability


查看完整回答
反对 回复 2022-10-11
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号