我需要向Wagtail 的影像模型添加一個基于字串的唯一 ID。這些 ID 是字母、數字和標點符號的相對較短的組合,例如“AS.M-1.001”。因此,我使用帶有 Django 標準的自定義影像模型與引數. 但遺憾的是,編輯表單不會檢查 ID 是否唯一。所以我可以對多個影像使用相同的 ID。這種對唯一性的檢查在 Wagtail 中的任何其他標準形式中都有效,例如模型。但不適用于影像模型。CharFieldunique=TruePage
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 中的管理表單的標準方法是否完全適用于影像模型?獲得唯一字串識別符號的其他方法是什么?...或自定義此表單。
解決方案(更新)
按照@gasman 的建議,我將以下行添加到我的settings/base.py:
WAGTAILIMAGES_IMAGE_MODEL = 'images.CustomImage'
WAGTAILIMAGES_IMAGE_FORM_BASE = 'images.forms.CustomImageForm' # NEW
并forms.py在我的影像應用程式中添加了以下表單:
from django.core.exceptions import ValidationError
from wagtail.images.forms import BaseImageForm
from .models import CustomImage
class CustomImageForm(BaseImageForm):
def clean(self):
cleaned_data = super().clean()
custom_id = cleaned_data.get("custom_id")
if CustomImage.objects.filter(custom_id=custom_id).exists():
raise ValidationError(
"Custom ID already exists"
)
return cleaned_data
uj5u.com熱心網友回復:
Wagtail 中的影像不使用WagtailAdminModelForm或base_form_class屬性 - 這些被頁面、片段和 ModelAdmin 用來支持 Wagtail 特定的功能,如行內子項和面板,但影像通過普通的 Django 模型和表單作業。
您可以通過子類化 BaseImageForm 并在專案設定中設定WAGTAILIMAGES_IMAGE_FORM_BASE來自定義表單。只要您在models.py 之外的某處定義表單類(例如在單獨的forms.py 模塊中),您就可以避免導致“模型尚未加載”錯誤的回圈依賴。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/371877.html
標籤:Python 姜戈 马尾 wagtail-admin
