Django 管理员,无法分组:异常值:'dict' 对象没有属性“_meta”
Django Admin, can't groupe by: Exception Value: 'dict' object has no attribute '_meta'
我有这个映射到 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
首先,看起来您使用的是 Django 1.6,它将 queryset
的使用更改为 get_queryset
。因此,为防止混淆,只需使用 get_queryset
或完全使用不同的名称(如果这不是您想要的)。
ModelAdmin中的get_queryset
方法在documentation(强调我的)中有如下描述:
The get_queryset method on a ModelAdmin returns a QuerySet of all model instances that can be edited by the admin site.
您实施的 queryset
returns 投影, 不是 模型(包含 _meta
的东西),而是字典,因此例外。
因此,这不是您查询本身的问题,而是您在哪里使用它的问题。 get_queryset
方法不适合做你想做的事。
如果您想使用此信息进行过滤,请查看 creating a custom filter. If you want to show this information as one of the fields in your changelist, use a callable in list_display
我有这个映射到 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
首先,看起来您使用的是 Django 1.6,它将 queryset
的使用更改为 get_queryset
。因此,为防止混淆,只需使用 get_queryset
或完全使用不同的名称(如果这不是您想要的)。
ModelAdmin中的get_queryset
方法在documentation(强调我的)中有如下描述:
The get_queryset method on a ModelAdmin returns a QuerySet of all model instances that can be edited by the admin site.
您实施的 queryset
returns 投影, 不是 模型(包含 _meta
的东西),而是字典,因此例外。
因此,这不是您查询本身的问题,而是您在哪里使用它的问题。 get_queryset
方法不适合做你想做的事。
如果您想使用此信息进行过滤,请查看 creating a custom filter. If you want to show this information as one of the fields in your changelist, use a callable in list_display