Dmi*_*kin 13 django django-admin
class Item(models.Model):
name = models.CharField(max_length=100, unique=True)
def admin_amount(self):
total = self.warehouse_set.all().aggregate(item=Sum('amount'))
return total['item']
class Warehouse(models.Model):
name = models.CharField(max_length=100, unique=True)
item = models.ForeignKey('Item', blank=True, null=True)
amount = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
创建新字段是错误的,但我不能做类似的事情:
admin_amount.admin_order_field = 'admin_amount'
Run Code Online (Sandbox Code Playgroud)
我发现了类似的问题,但我遇到了重写queryset()方法的问题(不能写类似的东西qs.warehouse_set.all().annotate(models.Sum('amount'))
).有没有办法为我或我的情况调整这个解决方案,还有另一种解决方案吗?
mfi*_*tzp 18
使用链接问题中的代码(以及建议的编辑),底部应该为您的示例执行此操作.原理是使用annotate将子查询中的其他数据添加到返回的QuerySet.在这种情况下Sum
,仓库中的金额.
接下来,添加一个包装器函数amount_in_warehouses
以获取每行的该值,并告诉管理员显示此列表list_display = ('amount_in_warehouses',)
,并对其进行排序amount_in_warehouses.admin_order_field = 'amount_in_warehouses'
.
class ItemAdmin(admin.ModelAdmin):
list_display = ('amount_in_warehouses',)
name = models.CharField(max_length=100, unique=True)
def queryset(self, request):
qs = super(ItemAdmin, self).queryset(request)
qs = qs.annotate(models.Sum('warehouse__amount'))
return qs
def amount_in_warehouses(self, obj):
return obj.warehouse__amount__sum
amount_in_warehouses.admin_order_field = 'amount_in_warehouses'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8419 次 |
最近记录: |