我正在使用wagtails的ModelAdmin模块(与Django ModelAdmin不同)将自定义Order模型添加到wagtail管理界面。该模型具有指向自定义Address模型的外键。
我希望在InspectView中(已启用)像在Django的管理界面中一样显示Address模型作为内联显示。目前它显示字符串表示形式。
我希望在InspectView中(已启用)像在Django的管理界面中一样显示Address模型作为内联显示。目前它显示字符串表示形式。
您需要通过继承 ModelAdmin
类来创建一个类,并声明与该 ModelAdmin
相关联的模型。这是 ModelAdmin
的基础知识,您可以在 文档 中找到相关信息。此外,有关查看检查基础知识的内容可以在 这份文档 中找到。
class OrderAdmin(ModelAdmin):
model = Order
inspect_view_enabled = True
inspect_view_fields = (
'id',
'date',
)
我有一个名为Order
的模型,我需要在wagtail检查视图中仅显示id
和date
。同时,我还有一个与Order
模型存在一对一关系的Address
模型。我需要在检查视图中显示来自该Address
的city
。
但是如果只是像下面这样添加新字段,它将会报错,因为wagtail
在Order
模型中找不到名为city
的字段。
inspect_view_fields = (
'id',
'date',
'city',
)
对于inspect_view_fields
数组中的每个字段,wagtail都会调用一个名为get_dict_for_field
的方法来获取该字段的关联标签和值。 您可以轻松地覆盖此方法。 覆盖后,您应告诉wagtail使用已覆盖的方法。 您可以按以下方式操作。
class OrderInspectView(InspectView):
def get_dict_for_field(self, field_name): # Override to support custom fields
# Do the implementation for custom fields
return super().get_dict_for_field(field_name)
class OrderAdmin(ModelAdmin):
model = Order
inspect_view_enabled = True
inspect_view_class = OrderInspectView # Tell wagtail to use our class instead of the default class
inspect_view_fields = (
'id',
'name',
'city', # Custom field
)
def get_dict_for_field(self, field_name):
if field_name == 'city':
qs = Address.objects.filter(order=self.instance.id)
value = str(qs[0].city) if len(qs) > 0 else '-'
return {
'label': 'City',
'value': value,
}
return super().get_dict_for_field(field_name)
我并不经常使用InspectView,但它将模型表示为一个渲染的模板,没有字段等。因此,也许你可以定义自己的模板,并从Order中调用自定义属性{{ value.bound_blocks.order.full_addres }}。
希望这对你有所帮助,
罗伯特