Wagtail 5.0中如何为Snippet的ForeignKey添加新建项面板
解决方案
要在Wagtail 5.0的Scientist编辑表单中添加「新建国家」按钮,实现无需跳转直接创建Country的功能,只需完成以下两步:
1. 将Country注册为可选择的Snippet
首先要把Country模型注册为Wagtail Snippet,这样才能在关联选择器中提供快速创建入口:
from django.utils.translation import gettext_lazy as _ from wagtail.snippets.models import register_snippet from wagtail.admin.panels import FieldPanel from django.db import models @register_snippet class Country(models.Model): name = models.CharField( _("name"), max_length=25, ) panels = [ FieldPanel("name"), ] def __str__(self): return self.name
2. 替换FieldPanel为ModelChooserPanel
将Scientist模型中Country字段的FieldPanel替换为Wagtail内置的ModelChooserPanel,该面板默认自带关联模型的创建按钮,还支持自定义按钮文本:
from django.utils.translation import gettext_lazy as _ from wagtail.admin.panels import FieldPanel, ModelChooserPanel from wagtail.models import DraftStateMixin, RevisionMixin, ClusterableModel from django.db import models class Scientist(DraftStateMixin, RevisionMixin, ClusterableModel): name = models.CharField(_("name"), max_length=25) country = models.ForeignKey( Country, on_delete=models.PROTECT, related_name='scientists', ) panels = [ FieldPanel("name"), # 替换为带创建按钮的选择面板,自定义按钮文本为「新建国家」 ModelChooserPanel("country", button_text="新建国家"), ]
效果说明
修改完成后,进入Scientist编辑页面,Country字段右侧会显示「新建国家」按钮,点击后弹出模态框,填写Country名称并保存后,新创建的Country会自动关联到当前Scientist条目,全程无需离开编辑页面。
内容的提问来源于stack exchange,提问作者Pere Picornell
相关产品推荐
相关产品推荐

