获取Django Admin.ModelAdmin以显示两个表的连接



我有一个带有以下型号的django应用程序。py

from django.db import models
class Order(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    paid = models.BooleanField(default=False)
    delivered = models.BooleanField(default=False)

class OrderItem(models.Model):
    order = models.ForeignKey(Order,
                              related_name='items',
                              on_delete=models.CASCADE)
    product = models.ForeignKey(Product,
                                related_name='order_items',
                                on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2)

,在我的admin.py中,我有这个

from django.contrib import admin
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_display = ['id', 'first_name', 'last_name', 'email',
                    'paid', 'delivered']
    list_filter = ['paid', 'delivered']

这仅显示顺序表。

我想将订单与订购表一起加入订单,并将其显示在Django管理员中。我不确定这是相关的,但是对于一个订单,可能有很多订购。

据我所知,您不能直接在OrderAdmin中显示OrderItem s。但是,您可以在OrderItemAdmin中显示Order,或使用InlineModeladmin在Order详细信息页中显示订购信息。这样:

class OrderItemInline(admin.TabularInline):
    model = OrderItem
class OrderAdmin(admin.ModelAdmin):
    inlines = [
        OrderItemInline,
    ]

如果您仍然想在管理页面中显示订单元素(或订单项目的部分(,则可以在list_display字段中添加一种方法,并使用该方法来获取OrderItems。这样:

class OrderAdmin(admin.ModelAdmin):
    list_display = (..., 'get_order_items')
    def get_order_items(self, obj):
        return return ", ".join(obj.items.values_list("pk", flat=True))
    get_order_items.short_description = 'Order Items'

最新更新