Python 在WagtailCMS的InlinePanel中是否有对相关订单进行验证的方法?
我正在使用Wagtail CMS,我需要对我的Python 在WagtailCMS的InlinePanel中是否有对相关订单进行验证的方法?,python,django,validation,wagtail,Python,Django,Validation,Wagtail,我正在使用Wagtail CMS,我需要对我的Orderable模型进行一些验证。例如,确保最多填充一个字段 通常,我会覆盖Django模型的clean(self)方法,但在该方法中调用super().clean()将返回None。我仍然能够使用self.field\u name访问字段,并且提升ValidationError仍然会阻止创建模型,但它不会显示是哪些字段导致了管理界面中的模型错误 我已尝试重写clean方法,该方法停止提交模型,但不会在界面上显示错误 我尝试了以下方法,但是那里的c
Orderable
模型进行一些验证。例如,确保最多填充一个字段
通常,我会覆盖Django模型的clean(self)
方法,但在该方法中调用super().clean()
将返回None
。我仍然能够使用self.field\u name
访问字段,并且提升ValidationError
仍然会阻止创建模型,但它不会显示是哪些字段导致了管理界面中的模型错误
我已尝试重写clean
方法,该方法停止提交模型,但不会在界面上显示错误
我尝试了以下方法,但是那里的clean
方法甚至没有为Orderable
调用
这是我的clean
方法的示例
def清洁(自清洁):
super().clean()
has_image=self.image不是无
has\u video=self.video\u url不是无
如果has_image==has_video:
raise ValidationError('必须设置视频或图像')
我希望验证错误会出现在管理界面中。我已经深入研究了wagtail源代码,我想我找到了访问orderable表单控件的方法 假设你有一个页面模型
class TestPage(Page):
testPageTitle = RichTextField(blank=True, max_length=250)
content_panels = Page.content_panels + [
FieldPanel('testPageTitle'),
InlinePanel('test_page_field')
]
base_form_class = TestPageForm
对于某些可订购模型,该模型通过相关名称“test_page_field”链接到页面
class TestPageField(Orderable):
page = ParentalKey(TestPage, on_delete=models.CASCADE, related_name='test_page_field')
testPageFieldTitle = models.CharField(blank=True, max_length=250)
panels = [
FieldPanel('testPageFieldFieldTitle')
]
然后,您可以在页面的clean方法中,通过self.formsets['test\u page\u field'].forms
,这是Django表单对象的列表,可以在其中执行定期检查,并且可以使用.add\u error()
方法。相关的base\u form\u class
如下所示:
class TestPageForm(WagtailAdminPageForm):
def clean(self):
cleaned_data = super().clean()
#loop over linked orderables
for form in self.formsets['test_page_field'].forms:
#check first if form is valid, otherwise cleaned_data will not be accesible/set
if form.is_valid():
cleaned_form_data = form.clean()
testPageFieldFieldTitle = cleaned_form_data.get('testPageFieldFieldTitle')
#execute some validation condition, and raise the error if it fails
if testPageFieldFieldTitle is None:
form.add_error('testPageFieldFieldTitle', 'please dont leave me empty')
return cleaned_data
我希望这有帮助