django 'dict' object has no attribute get_absolute_url or other attribute
By:Roy.LiuLast updated:2020-07-06
今天在给新写的BLOG增加 sitemap.xml, 在其中会用到查询 文章的编号和时间字段。因为如果直接用 Entity.object.all() 的话,性能很差,没必要在读取站点map的时候,也把内容读出来,我只需要ID,时间,以及拼凑出来的URL而已。
首先的第一个想法,既然只要部分字段,那么直接用values() 不就行了吗:
Entity.objects.filter(ischeck = 1).values('id','date')
按正常的逻辑来说,这是对的,SQL 语句只会去select id, date 字段,不会全表扫描。但结果呢,报错了:django 'dict' object has no attribute get_absolute_url , 因为values 之后,返回的是一个dict, 并不是一个object对象,所以在model中定义的get_absolute_url 方法根本找不到。怎么办。
在django中,还提供了一个方法, only:
Entity.objects.filter(ischeck = 1).only('id','date')
按照这么做,就不会报错了。
参考资料:https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.only
From:一号门
Previous:java航空订票系统
COMMENTS