gpt4 book ai didi

django - 如何在列表显示表单上添加自定义验证

转载 作者:行者123 更新时间:2023-12-05 00:35:48 25 4
gpt4 key购买 nike

我有一个模型,其中 是用于设置元素是否处于事件状态的选项。

可以具有带有“True”值的“active”属性的元素数量是有限制的。

我已经在 AdminModel 上编写了验证代码。所以现在如果在编辑元素时我将其标记为“事件”并且我已经达到“actvie”元素的限制,我会引发异常。

def clean_active(self):
if self.cleaned_data["active"]:
#check number of active elements in model.

在管理界面中,我还有一个对象列表。
在此列表中,我已将字段“事件”标记为可编辑,
list_display = ('name', 'first_promotion', 'second_promotion','active')
readonly_fields= ['name']
list_editable = ['事件']

我想要的是能够在模型的“列表显示”上进行此验证。
我无法为列表显示添加验证代码。

有人可以告诉我如何做到这一点吗?
提前致谢。

最佳答案

好问题!更改列表表单似乎来自 ModelAdmin.get_changelist_form您可以在哪里供应自己的 ModelForm作为模型集的基础模型。

class MyForm(forms.ModelForm):
def clean_active(self):
cd = self.cleaned_data.get('active')
limit = 5 # replace with logic
if cd >= limit:
raise forms.ValidationError("Reached limit")
return cd

class Meta:
model = MyModel

class MyModelAdmin(admin.ModelAdmin):
def get_changelist_form(self, request, **kwargs):
return MyForm

如果您想修改表单集验证(表单集合),您可以覆盖 get_changelist_formset
from django.forms.models import BaseModelFormSet

class BaseFormSet(BaseModelFormSet):
def clean(self):
print self.cleaned_data
# this is the cleaned data for ALL forms.
if 'your_condition':
raise forms.ValidationError("Your error")

return self.cleaned_data

class MyModelAdmin(admin.ModelAdmin):
def get_changelist_formset(self, request, **kwargs):
kwargs['formset'] = BaseFormSet
return super(MyModelAdmin, self).get_changelist_formset(request, **kwargs)

关于django - 如何在列表显示表单上添加自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8964465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com