Django Admin,无法分组:异常值:'dict' 对象没有属性'_meta'
Posted
技术标签:
【中文标题】Django Admin,无法分组:异常值:\'dict\' 对象没有属性\'_meta\'【英文标题】:Django Admin, can't groupe by: Exception Value: 'dict' object has no attribute '_meta'Django Admin,无法分组:异常值:'dict' 对象没有属性'_meta' 【发布时间】:2015-04-23 17:13:12 【问题描述】:我有这个映射到 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" 与 "region" 相加,所以:
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("region") 作为抛出异常:
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
【问题讨论】:
我怀疑这个异常背后有错误,没有被接受code.djangoproject.com/ticket/24387 【参考方案1】:首先,您使用的是 Django 1.6,它将 queryset
的使用更改为 get_queryset
。因此,为防止任何混淆,只需使用 get_queryset
或完全使用不同的名称(如果这不是您想要的)。
ModelAdmin 中的get_queryset
方法在documentation(强调我的)中有以下描述:
ModelAdmin 上的 get_queryset 方法返回一个由管理站点编辑的所有模型实例组成的 QuerySet。
您的queryset
实现返回一个投影,它不是 模型(包含_meta
的东西),而是一个字典,因此例外。
因此,这不是您的查询本身的问题,而是您在哪里使用它的问题。 get_queryset
方法不适合做你想做的事。
如果您想使用此信息进行过滤,请查看creating a custom filter。如果您想将此信息显示为更改列表中的字段之一,use a callable in list_display
【讨论】:
如果 get_queryset 方法不正确,那么如何在管理列表中显示利用过滤器功能的分组数据? 你不能使用 callable 在一组模型实例上实现 aggregation。 不适用于任意集合,不。如果您希望您的聚合完成(例如)当前的更改列表选择,恐怕您将不得不考虑扩展管理模板并从那里调用自定义方法。请记住:管理员不是您的应用程序! ***.com/a/677509/1636314以上是关于Django Admin,无法分组:异常值:'dict' 对象没有属性'_meta'的主要内容,如果未能解决你的问题,请参考以下文章
在没有 django.contrib.admin 的情况下运行 django 应用程序
Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL