我有一个带有以下型号的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'