Django admin TabularInline группировка по запросу
У меня есть класс TabularInline, StockPartInlines в инлайн представлении формы я пытаюсь GROUP на основе двух полей (container_id, expiration_date) и добавить дополнительное поле, которое является SUM существующего поля.
class Stock(models.Model):
part = models.ForeignKey(Part,
on_delete=models.PROTECT,
related_name='stock')
container = models.ForeignKey(StorageContainer,
on_delete=models.PROTECT,
related_name='items',
null=True)
quantity_change = models.IntegerField(default=0)
expiration_date = models.DateField(blank=True, null=True)
class PartAdmin(admin.ModelAdmin):
inlines = [StockPartInlines]
class StockPartInlines(admin.TabularInline):
model = Stock
fields = ['container', 'expiration_date', 'quantity']
readonly_fields = ['quantity']
def quantity(self, obj):
return obj._quantity
Эквивалентный SQL-оператор будет выглядеть следующим образом;
SELECT
part_id,
container_id,
expiration_date,
SUM(quantity_change)
FROM
inventory_stock
WHERE
part_id = part_id
GROUP BY
container_id,
expiration_date;
Я пытался заставить это работать, переопределив метод 'get_queryset()' из StockPartInlines
def get_queryset(self, request):
qs = super(StockPartInlines, self).get_queryset(request)
.values('container','expiration_date')
.order_by('container')
.annotate(_mwa=Sum('quantity_change'))
return qs
В результате возвращается ошибка 'dict' object has no attribute '_meta', traceback. Я полагаю, это происходит потому, что использование .values() в queryset возвращает queryset из dicts, а не queryset из objects.
Есть ли другой подход, который я мог бы использовать для отображения результатов этого запроса в виде встроенной формы в панели администратора?