在这种情况下,每个功能都有一个Epic (models.Model)
epic = models.ForeignKey(Epic, on_delete=models.CASCADE, default='')
在管理员下拉菜单中(并且仅在此处),我想将每个项目显示为:
史诗名称 - 特征名称
因为我的一些功能名称相似但史诗不同。我无法更改 Feature 模型的 __str __ 函数,否则会影响整个应用程序。
我怎样才能做到这一点?
在这种情况下,每个功能都有一个Epic (models.Model)
epic = models.ForeignKey(Epic, on_delete=models.CASCADE, default='')
在管理员下拉菜单中(并且仅在此处),我想将每个项目显示为:
史诗名称 - 特征名称
因为我的一些功能名称相似但史诗不同。我无法更改 Feature 模型的 __str __ 函数,否则会影响整个应用程序。
我怎样才能做到这一点?
一种方法是继承 Django 的ModelChoiceField,并覆盖提供标签的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)
然后,您需要自定义编辑表单以使用该自定义表单字段类型来代替默认的 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