san*_*dok 4 django django-admin
我有一个模型,其中是一个选项,用于设置元素是否有效.
对具有"True"值的"active"属性的元素数量有限制.
我在AdminModel上编写了验证代码.所以现在如果在编辑元素时我将其标记为"活动"并且我已达到"actvie"元素的限制,我会引发异常.
def clean_active(self):
if self.cleaned_data["active"]:
#check number of active elements in model.
Run Code Online (Sandbox Code Playgroud)
在管理界面中,我还有一个对象列表.在此列表中,我将"active"字段标记为可编辑,list_display =('name','first_promotion','second_promotion','active')readonly_fields = ['name'] list_editable = ['active']
我想要的是能够在模型的"列表显示"上进行此验证.我无法在哪里添加列表显示的验证码.
谁能告诉我怎么做?提前致谢.
好问题!更改列表表单似乎从ModelAdmin.get_changelist_form您可以提供自己的位置拉出来ModelForm作为modelformset基本模型.
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
Run Code Online (Sandbox Code Playgroud)
如果要修改表单集验证(表单集合),则覆盖 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |