Как настроить форму администратора для пользовательской модели изображения в Wagtail CMS?

Мне нужно добавить уникальный идентификатор на основе строки к модели изображения Wagtail . Эти идентификаторы представляют собой относительно короткую комбинацию букв, цифр и знаков препинания, например, "AS.M-1.001". Поэтому я использую custom image model со стандартным для Django CharField для этого аргументом unique=True. Но форма редактирования, к сожалению, не проверяет, является ли ID уникальным. Таким образом, я могу использовать один и тот же ID для нескольких изображений. Эта проверка на уникальность работает в любой другой стандартной форме в Wagtail, например, в модели Page. Но не для модели изображения.

from django.db import models
from wagtail.images.models import Image, AbstractImage

class CustomImage(AbstractImage):
    custom_id = models.CharField(max_length=32, unique=True, null=True, blank=True)
    admin_form_fields =  ( 'custom_id', ) + Image.admin_form_fields

Мой подход заключается в переопределении формы редактирования на пользовательскую, чтобы отображать больше предупреждений и ошибок, как это можно сделать с помощью base_form_class для модели Wagtail Page и т.д., как описано здесь. Я пробовал как wagtail.admin.forms.WagtailAdminModelForm, так и wagtail.images.forms.BaseImageForm.

from wagtail.images.forms import BaseImageForm
from wagtail.admin.forms import WagtailAdminModelForm

class CustomImageForm(WagtailAdminModelForm):
    # add more logic here
    pass

class CustomImage(ArtButlerIDMixin, AbstractImage):
    ...
    base_form_class = CustomImageForm

Оба приводят к одному и тому же исключению:

raise AppRegistryNotReady("Models aren't loaded yet.")

Попробовал пересортировать приложения в настройках - безрезультатно. Работает ли вообще стандартный подход, как переопределить форму администратора в Wagtail для модели изображения? Какие могут быть другие способы заставить уникальный строковый идентификатор работать здесь? ... или настроить эту форму

Изображения в Wagtail не используют WagtailAdminModelForm или атрибут base_form_class - они используются страницами, сниппетами и ModelAdmin для поддержки специфических для Wagtail функций, таких как встроенные дочерние элементы и панели, но изображения работают через обычные модели и формы Django.

Вы можете настроить форму, используя подкласс BaseImageForm и установив WAGTAILIMAGES_IMAGE_FORM_BASE в настройках проекта. Если вы определите свой класс формы где-то вне models.py (например, в отдельном модуле forms.py), вы избежите круговой зависимости, которая приводит к ошибке "Models are not loaded yet".

Вернуться на верх