如何在 Wagtail 管理中为模型字段添加外键 object 前缀?
How to prefix a foreign key object to a model field in Wagtail admin?
在这种情况下,每个功能 都有一个 史诗 (models.Model)
epic = models.ForeignKey(Epic, on_delete=models.CASCADE, default='')
在管理员 drop-down(而且只有那里)我想将每个项目显示为:
epic.name - feature.name
因为我的一些功能名称相似但不同epics。我不能更改Feature模型的__str__函数,否则会影响整个应用。
我怎样才能做到这一点?
一种方法是继承 Django 的 ModelChoiceField, and override the label_from_instance 提供标签的方法:
from django.forms import ModelChoiceField
class FeatureChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "%s - %s" % (obj.epic.name, obj.name)
然后您需要customise the edit form使用该自定义表单字段类型代替默认的 ModelChoiceField:
from wagtail.admin.forms import WagtailAdminModelForm
# note - use WagtailAdminPageForm if this is a page model rather than a
# plain Django model managed through snippets / ModelAdmin
class ScopeForm(WagtailAdminModelForm):
feature = FeatureChoiceField(queryset=Feature.objects.all())
class Scope(models.Model):
# ...
base_form_class = ScopeForm
在这种情况下,每个功能 都有一个 史诗 (models.Model)
epic = models.ForeignKey(Epic, on_delete=models.CASCADE, default='')
在管理员 drop-down(而且只有那里)我想将每个项目显示为:
epic.name - feature.name
因为我的一些功能名称相似但不同epics。我不能更改Feature模型的__str__函数,否则会影响整个应用。
我怎样才能做到这一点?
一种方法是继承 Django 的 ModelChoiceField, and override the label_from_instance 提供标签的方法:
from django.forms import ModelChoiceField
class FeatureChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "%s - %s" % (obj.epic.name, obj.name)
然后您需要customise the edit form使用该自定义表单字段类型代替默认的 ModelChoiceField:
from wagtail.admin.forms import WagtailAdminModelForm
# note - use WagtailAdminPageForm if this is a page model rather than a
# plain Django model managed through snippets / ModelAdmin
class ScopeForm(WagtailAdminModelForm):
feature = FeatureChoiceField(queryset=Feature.objects.all())
class Scope(models.Model):
# ...
base_form_class = ScopeForm