如何解决django 管理员对列表视图中的计算字段进行排序
我有两个模型,一个(设备)有另一个(存储)的外键。在存储的管理概述中,我希望能够添加一个计数,以计算出每个存储指向的设备数量。使用下面的代码,我能够正确计算指向每个存储的设备数量。但是,当尝试按存储中的数字进行排序时,它会崩溃并显示以下错误:
无法将关键字“_get_device_number”解析为字段。选择是: ... #字段列表
如何将我的计算字段添加到允许搜索的列表中?
class Device(models.Model):
...
storage_id = models.ForeignKey(Storage,on_delete=models.PROTECT,blank=True,null=True) #Allowed to be null since a Device may not be in storage.
class Storage(models.Model):
...
def _get_device_number(self,):
return Device.objects.filter(storage_id=self.storage_id).count()
class StorageAdmin(admin.ModelAdmin):
...
list_display = ['__str__','get_device_number',]
def get_device_number(self,obj):
return obj._get_device_number()
get_device_number.admin_order_field = '_get_device_number'
解决方法
管理员列表视图无法访问模型方法。但是,注释管理查询集确实有效。
class StorageAdmin(admin.ModelAdmin):
def get_queryset(self,request):
queryset = super().get_queryset(request)
queryset = queryset.annotate(
_get_device_number=Count('device')
)
return queryset
def get_device_number(self,obj):
return obj._get_device_number
get_device_number.admin_order_field = '_get_device_number'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。