帮助解决管理员表单验证错误
我刚接触Django,遇到了一些关于在管理模块中验证表单的问题,特别是在ModelForm中抛出异常。我可以在clean方法里验证和处理数据,但就是无法抛出错误。每当我加上任何raise语句,就会出现这个错误:“'NoneType'对象没有'ValidationError'这个属性”。如果我把raise部分去掉,一切就正常了。
然后如果我在clean方法里重新导入django.forms,并用一个不同的别名(比如从django导入forms作为blahblah),我就能用blahblah.ValidationError来抛出消息了。
有没有什么好的建议或者提示,教我怎么正确地做到这一点呢?
以下是我在Admin.py中做的示例:
admin.py
from django import forms
from proj.models import *
from django.contrib import admin
class FontAdminForm(forms.ModelForm):
class Meta:
model = Font
def clean_name(self):
return self.cleaned_data["name"].upper()
def clean_description(self):
desc = self.cleaned_data['description']
if desc and if len(desc) < 10:
raise forms.ValidationError('Description is too short.')
return desc
class FontAdmin(admin.ModelAdmin):
form = FontAdminForm
list_display = ['name', 'description']
admin.site.register(Font, FontAdmin)
--
谢谢,
A
1 个回答
你的问题可能出在*导入上。
from proj.models import *
如果proj.models里面有任何叫做forms的变量(比如像“from django import forms”这样的模块导入),那么它可能会覆盖你最初的导入:
from django import forms
我建议你明确地从proj.models导入,比如:
from proj.models import Font
如果这样还不行,看看有没有其他叫“forms”的变量可能会影响到你的作用域。
你可以使用自省来查看“forms”是什么。在你的clean_description方法里面:
print forms.__package__
我猜它不会是“django”(或者会返回一个错误,说明它绝对不是django.forms)。