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.

Есть ли другой подход, который я мог бы использовать для отображения результатов этого запроса в виде встроенной формы в панели администратора?

Вернуться на верх