fbpx

Как отсортировать столбец из list_display по методу?

223 просмотра
0
0 Комментариев

models.py

 class Item(models.Model):
 name = models.CharField(max_length=100, unique=True)
 
 def __unicode__(self):
     return u'%s' % self.name
 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()

admin.py

class ItemAdmin(admin.ModelAdmin):
     fields = ['name']
     list_display = ['name', 'admin_amount']
 
class WarehouseAdmin(admin.ModelAdmin):
     fields = ['name', 'item', 'amount']
     list_display = ['name', 'item', 'amount']
 
admin.site.register(Warehouse,WarehouseAdmin)
admin.site.register(Item,ItemAdmin)

К сожалению сразу по методу отсортировать нельзя навроде

admin_amount.admin_order_field = 'admin_amount'

Создавать новое поле в моделе, гду будет храниться общее количество Item на всех Warehouse тоже не хочется, или это общепринятая практика и единственный выход?


Добавить комментарий

1 Ответы

Python Опубликовано 19.01.2019
0

решение

class ItemManager(models.Manager):
def get_query_set(self):
    return super(ItemManager,         self).get_query_set().annotate(total=models.Sum('warehouse__amount'))
 
class Item(models.Model):
name = models.CharField(max_length=100, unique=True)
objects = ItemManager()
 
def admin_amount(self):
    total = self.warehouse_set.all().aggregate(item=models.Sum('amount'))
    return total['item']
 
admin_amount.admin_order_field = 'total'

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up