我有一个映射到 postgresql 视图的模型
class AppModel(models.Model):
nbr = models.BigIntegerField(blank=True, null=True)
region = models.ForeignKey(AppWilaya,blank=True, null=True)
date_preorder = models.DateField(blank=True, null=True)
id = models.IntegerField(primary_key=True,blank=True, db_column='dummy_id')
我想要实现的是总结"nbr" by "region", so:
class AppModelAdmin(admin.ModelAdmin):
....
def queryset(self, request):
qs = super(AppModelAdmin, self).get_queryset(request)
qs=qs.values("region").annotate(total=Sum( 'nbr'))
但 Django Admin 似乎不接受.values(“区域”)抛出异常:
Exception Value: 'dict' object has no attribute '_meta'
Exception Location: [PATH_TO]\lib\site-packages\django\contrib\admin\util.py in lookup_field, line 242
首先,看起来你正在使用 Django 1.6,它改变了使用queryset
to get_queryset
。因此,为了防止任何混淆,只需使用get_queryset
或者如果这不是您想要的,则完全使用不同的名称。
The get_queryset
ModelAdmin 中的方法在文档 https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset(强调我的):
ModelAdmin 上的 get_queryset 方法返回所有查询集模型实例可以由管理站点编辑。
您的实施queryset
返回一个投影,即not一个模型(包含_meta
),但是一本字典,因此是例外。
因此,这不是查询本身的问题,而是使用查询的位置的问题。这get_queryset
方法不是做你想做的事的正确地方。
如果您想使用此信息进行过滤,请查看创建自定义过滤器 https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter。如果您想将此信息显示为更改列表中的字段之一,使用可调用的list_display https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)