Django 管理员,无法分组依据:异常值:“dict”对象没有属性“_meta”

2024-01-11

我有一个映射到 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_querysetModelAdmin 中的方法在文档 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(使用前将#替换为@)

Django 管理员,无法分组依据:异常值:“dict”对象没有属性“_meta” 的相关文章

随机推荐