我有一个具有以下模型的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']
这仅显示“订单”表。
我想将Order与OrderItem表联接起来,并在Django管理员中显示它。我不确定这是否相关,但是对于一个订单,可能有很多OrderItem。
答案 0 :(得分:0)
据我所知,您无法直接在OrderItem
中显示OrderAdmin
。但是您可以在Order
中显示OrderItemAdmin
,或使用InLineModelAdmin在Order
详细信息页面中显示OrderItems。像这样:
class OrderItemInline(admin.TabularInline):
model = OrderItem
class OrderAdmin(admin.ModelAdmin):
inlines = [
OrderItemInline,
]
如果您仍想在管理页面中显示OrderItems(或订单项的一部分),则可以在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'