Как прикрепить объект внешнего ключа к полю модели в админке Wagtail?
В этом случае каждая функция имеет одну 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