【问题标题】:Help with Admin forms validation error帮助管理表单验证错误
【发布时间】:2010-11-28 18:51:51
【问题描述】:

我对 Django 很陌生,我在验证方面遇到了一些问题 管理模块中的表单,更具体地说,在 模型形式。我可以用干净的方法验证和操作数据,但是 似乎不会引发任何错误。每当我包括任何加薪 声明我得到这个错误“'NoneType'对象没有属性 'ValidationError'"。当我删除 raise 部分时,一切正常 很好。

然后,如果我使用不同的别名(例如从 django 导入表单作为 blahbalh)重新导入 django.forms(在 clean 方法中),那么我可以使用 blahblah.ValidateException 引发消息。

关于正确做这件事的任何提示或建议?

这是我在 Admin.py 中所做的一个示例:

admin.py

从 django 导入表单 从 proj.models 导入 * 从 django.contrib 导入管理员

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

-- 谢谢, 一个

【问题讨论】:

  • 是否有一些名为 forms 的模块变量?
  • 我的意思是解释器可能看到的 admin.py 中名为 forms 的变量,而不是解析模块表单本身。

标签: python django django-models django-admin


【解决方案1】:

您的问题可能出在 * 导入中。

from proj.models import * 

如果 proj.models 包含任何名为 forms 的变量(包括一些模块导入,例如“from django import forms”),它可能会击败您的初始导入:

from django import forms

我会从 proj.models 显式导入,例如

from proj.models import Font

如果这不起作用,请查看是否有任何其他变量名为“forms”可能会干扰您的范围。

您可以使用自省来查看“形式”是什么。在您的 clean_description 方法中:

print forms.__package__

我的猜测是它不会是“django”(或者会返回一个错误,表明它肯定不是 django.forms)。

【讨论】:

  • 是的,你是对的,它根本没有使用 django.forms,因此应用程序出现故障,现在已修复。非常感谢您的解释。
猜你喜欢
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多