我正在使用摇尾服务的ModelAdmin模块(与Django ModelAdmin不同)将自定义的Order模型添加到摇尾管理中。此模型具有自定义Address模型的外键。
我想将Address模型显示为内联(如django的管理)在InspectView中(我已经启用了)。当前,它显示字符串表示形式。
发布于 2022-06-25 17:00:01
背景
您必须通过继承ModelAdmin类来创建类,并声明与该ModelAdmin关联的模型。这是ModelAdmin基础知识,您可以在文献资料中找到它。此外,查看视图基础可以在这份文件中找到。
class OrderAdmin(ModelAdmin):
model = Order
inspect_view_enabled = True
inspect_view_fields = (
'id',
'date',
)我有一个名为Order的模型,我只需要在摇尾检查视图中显示id和date。此外,我还有一个Address模型,它与Order模型有一对一的关系。我需要在检查视图中显示来自Address的Address。
回答
但是,如果像下面这样添加新字段,就会产生一个错误,因为wagtail无法在Order模型中找到一个名为city的字段。
inspect_view_fields = (
'id',
'date',
'city',
)wagtail如何解析字段
对于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
)现在需要做的是获取与Address相关联的Order并返回它。您可以使用Order获取当前的检查self.instance。
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)发布于 2017-01-11 18:57:36
我没有经常使用InspectView,但它将模型表示为一个重命名的模板,没有字段等等。因此,您也许可以定义自己的模板并从{ value.bound_blocks.order.full_addres }命令调用自定义属性。
希望这有什么用
罗伯特
https://stackoverflow.com/questions/41567072
复制相似问题