如何在没有外键关系的情况下显示list_display中另一个表的列?

时间:2019-04-28 15:46:20

标签: django django-models django-forms django-views django-admin

我有以下数据库关系:

database relations

现在在admin.py的{​​{1}}中,我要显示订单表以及order_items中的数量行。为此,我将使用以下sql查询:

list_display

现在,我不知道如何在不使用原始查询的情况下使用django以正确的方式进行操作。

那我要在行中添加什么

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

为了显示数量行?

1 个答案:

答案 0 :(得分:1)

为了获取特定相关订单的order_items数量,请编写以下代码-

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

它将返回一个字典,例如-{'quantity': 3} 有关聚合的更多信息,请参见here

为了在您的订单管理模型中显示它-

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)

请参阅here,以了解有关django-admin定制的更多信息。