帮助解决管理员表单验证错误

1 投票
1 回答
1431 浏览
提问于 2025-04-15 14:22

我刚接触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 个回答

4

你的问题可能出在*导入上。

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)。

撰写回答