【问题标题】:How to show column from another table in list_display without foreign key relation?如何在没有外键关系的 list_display 中显示另一个表中的列?
【发布时间】:2019-09-17 09:39:45
【问题描述】:

我有这些数据库关系:

现在在list_display 中的admin.py 中,我想显示订单表以及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')

为了显示数量行?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    为了在您的 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)
    

    请参阅here 了解有关 django-admin 自定义的更多信息。

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2019-09-17
      • 2019-04-10
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 2021-01-05
      • 2012-12-29
      • 1970-01-01
      相关资源
      最近更新 更多