Как прикрепить объект внешнего ключа к полю модели в админке Wagtail?

enter image description here

В этом случае каждая функция имеет одну Epic (models.Model)

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

В выпадающем списке администратора (и только там) я хотел бы показать каждый элемент как:

epic.name - feature.name

Потому что некоторые из моих функций имеют похожее имя, но разные эпики. Я не могу изменить функцию __ str __ модели Feature, иначе это повлияет на все приложение.

Как я могу этого достичь?

Один из способов сделать это - подкласс 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
Вернуться на верх