0

在此处输入图像描述

在这种情况下,每个功能都有一个Epic (models.Model)

epic = models.ForeignKey(Epic, on_delete=models.CASCADE, default='')

在管理员下拉菜单中(并且仅在此处),我想将每个项目显示为:

史诗名称 - 特征名称

因为我的一些功能名称相似但史诗不同。我无法更改 Feature 模型的 __str __ 函数,否则会影响整个应用程序。

我怎样才能做到这一点?

4

1 回答 1

0

一种方法是继承 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
于 2021-11-16T10:08:04.653 回答