我已经审查了关于 有什么方法可以在 Wagtail 管理中的列表页面上显示字段吗? 但我的情况似乎相似但又足够不同,以至于该特定解决方案对我不起作用。 我希望在模型管理列表上实现类似的功能,而不是在页面列表上,并且我认为这应该是一个常见的要求,因此我认为在我尝试之前一定有人已经完成了此操作。
我还没有真正弄清楚如何尝试开始,但我看到的是 GitHub 上 wagtail.contrib.modeladmin 下的 modeladmin 模板标签,但我完全猜测。
任何人都可以指出我需要修改哪些模板以及我是否需要修改任何模板标签以及如何覆盖我需要覆盖的任何内容?
无需为此覆盖模板 - 这是 ModelAdmin 中的标准功能。通过在 ModelAdmin 类上设置
list_display
来添加额外的字段到列表中:
class BookAdmin(ModelAdmin):
model = Book
list_display = ('title', 'author')
ThumbnailMixin
:
from wagtail.contrib.modeladmin.mixins import ThumbnailMixin
from wagtail.contrib.modeladmin.options import ModelAdmin
class BookAdmin(ThumbnailMixin, ModelAdmin):
model = Book
thumb_image_field_name = 'cover_image'
list_display = ('title', 'author', 'admin_thumb')
(
'admin_thumb'
是ThumbnailMixin提供的特殊用途字段名称,应该使用而不是模型上的实际图像字段 - 在此示例中为cover_image
。)
modeladmin
功能在wagtail>=6
版本中不再可用(但之前的contrib模块仍然可用,如https://github.com/wagtail-nest/wagtail-modeladmin)。
您可以使用新的
PageListingViewSet
类来实现类似的结果。
这是带有缩略图的 Wagtail 管理页面列表,假设模型为
ProfilePage
并且图像字段为 avatar_image
:
# file: wagtail_hooks.py
from wagtail import hooks
from wagtail.admin.viewsets.pages import PageListingViewSet
from wagtail.admin.ui.tables import Column, BooleanColumn, BaseColumn
from .models import ProfilePage
class ImageColumn(BaseColumn):
cell_template_name = "wagtailadmin/tables/cell_image.html"
def get_cell_context_data(self, instance, parent_context):
context = super().get_cell_context_data(instance, parent_context)
image_field = getattr(instance, self.name, None)
if image_field:
context["image_url"] = image_field.get_rendition(
"fill-50x70|jpegquality-92"
).url
context["image_alt"] = instance.title
return context
class ProfilePageListingViewSet(PageListingViewSet):
icon = "group"
menu_label = "Profiles"
add_to_admin_menu = True
model = ProfilePage
columns = PageListingViewSet.columns + [
ImageColumn("avatar_image", label="Image"),
Column("last_published_at"),
]
profile_page_listing_viewset = ProfilePageListingViewSet("profile_pages")
@hooks.register("register_admin_viewset")
def register_profile_page_listing_viewset():
return profile_page_listing_viewset
<!-- templates/wagtailadmin/tables/cell_image.html -->
<td>
<img src="{{ image_url }}" alt="{{ image_alt }}">
</td>