【发布时间】:2018-04-13 20:20:14
【问题描述】:
我基于 Django 管理站点开发了一个工具(内部使用)。
我有模型验证器可以很好地工作,但是为了进行更复杂的验证,我试图覆盖 admin.py 中的 clean() 方法
我的 admin.py 看起来像这样:
from django.contrib import admin
from .models import Provider, Employer, Person, Learnership, Qualification, Unit_Standard
from django import forms
class ProviderForm(forms.ModelForm):
class Meta:
model = Provider
fields = 'all'
def clean(self):
provider_start_date = self.cleaned_data.get('provider_start_date')
provider_end_date = self.cleaned_data.get('provider_end_date')
if provider_start_date > provider_end_date:
raise forms.ValidationError("Start date can't be after end date")
return self.cleaned_data
admin.site.register(Provider)
提供者模型的 models.py:
class Provider(models.Model):
... lots of stuff here ...
provider_start_date = models.DateField()
provider_end_date = models.DateField(blank=True, null=True)
... lots of stuff here ...
def __str__(self):
return '%s %s' % (self.provider_name, self.provider_code)
问题是 admin.py 中显示的代码似乎没有触发,您可以将结束日期保存在开始日期之前的记录。
Django 管理界面确实是该框架的一个了不起的功能,我认为其他人可能也遇到了无法进行更高级验证的问题,因此它也会对他们有所帮助。
【问题讨论】:
-
请修正缩进
-
注意应该是
fields = '__all__',而不是'all'。
标签: python django django-models django-admin