Как показать столбец из другой таблицы в list_display без связи с внешним ключом? - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть эти отношения с базой данных:

database relations

Теперь в моем admin.py в list_display я хочу отобразить таблицу заказов плюс строку количества из order_items. Для этого я бы использовал этот SQL-запрос:

select order_id, quantity from orders inner join order_items on orders.order_id = order_items.order_id;

Теперь я не знаю, как правильно сделать это с django без использования необработанного запроса.

Так что же добавить в строку

list_display = ('order_id')

чтобы показать строку количества?

1 Ответ

1 голос
/ 28 апреля 2019

Чтобы получить количество для order_items для определенного связанного заказа, напишите следующий код -

>>> from django.db.models import Sum
>>> order.order_items_set.aggregate(quantity=Sum('quantity'))

Он вернет вам словарь, как - {'quantity': 3} Обратитесь к здесь для получения дополнительной информации об агрегатах

Чтобы показать его в вашей модели Admin for Order -

class OrderAdmin(admin.ModelAdmin):
    list_display = ('id', 'user_id', 'status', 'created_at', 'get_quantity')

    class Meta:
        model = Order

    def get_quantity(self, obj):
        result = obj.order_items_set.aggregate(quantity=Sum('quantity'))
        return result.get('quantity',0)

    get_quantity.short_description = 'Quantity'

admin.site.register(Order, OrderAdmin)

Обратитесь к здесь , чтобы узнать больше о настройках django-admin.

...