Python Django表单未调用clean\lt;fieldname>;(在这种情况下,请发送干净的电子邮件)
我找不到以下问题的答案,我花了几个小时才找到答案,因此我添加了它。我将添加我的解决方法和答案 我正在关注来自YouTube的教程。出于某种原因,我输入了相同的代码,我检查了每一个字母。但是由于某些原因,我的清理功能没有被调用。这可能是一些简单的东西,特别是因为a显示了类似的东西。这可能是我弄错的一个框架,但我不知道它是什么 这是相关代码 forms.py(完整复制/粘贴自) admin.py(从教程中键入)Python Django表单未调用clean\lt;fieldname>;(在这种情况下,请发送干净的电子邮件),python,django,Python,Django,我找不到以下问题的答案,我花了几个小时才找到答案,因此我添加了它。我将添加我的解决方法和答案 我正在关注来自YouTube的教程。出于某种原因,我输入了相同的代码,我检查了每一个字母。但是由于某些原因,我的清理功能没有被调用。这可能是一些简单的东西,特别是因为a显示了类似的东西。这可能是我弄错的一个框架,但我不知道它是什么 这是相关代码 forms.py(完整复制/粘贴自) admin.py(从教程中键入) 在使用了一段时间的打印语句并阅读了一些看似相似但最终没有解决我问题的问题后,我决定研究D
在使用了一段时间的打印语句并阅读了一些看似相似但最终没有解决我问题的问题后,我决定研究Django的来源(这个想法是受 然后,我决定调试源代码,因为我想知道Django如何处理我的定制函数(感谢a+)。在源代码中,我发现定制函数是围绕
returnsuper(EmailField,self).clean(value)
(第585行,django/forms/fields.py,django 1.8)调用的。当我在代码中单步执行时,我找到了关键行if hasattr(self,'clean_u%s'%name):
(第409行,django/forms/forms.py,django 1.8)。我检查了值name
,它是“email”
。但是,if语句的计算结果为False
((Pdb)p hasattr(self,'clean_u%s'%name)
)。我不明白为什么,直到我发现函数名没有注册((Pdb)pp dir(self)
)
我决定查看整个源代码存储库,交叉检查每个文件,然后发现
class Meta:
model = SignUp
form = SignUpForm
表示form
/SignUpForm
嵌套在元类中。起初,我并没有太多考虑它,但慢慢地我开始意识到它应该在元类之外,同时保持主类(SignUpAdmin
)
所以
form=SignUpForm
应该在一个选项卡后面标识。对于我来说,作为Django的初学者,这仍然让我感到困惑,因为我认为元类应该封装这两种类型的数据(模型和表单)。显然不应该,这就是我错的地方。不。您不需要删除元类。重要的是,你暗示clean_email方法嵌套在Meta类中,而它应该在Meta类之外,但在main form类中。谢谢:)天哪,我自己永远也不会明白这一点……我在表单的元类中也有我的clean()方法。非常感谢。
from django.contrib import admin
# Register your models here.
from .models import SignUp
from .forms import SignUpForm
class SignUpAdmin(admin.ModelAdmin):
list_display = ['__unicode__', 'timestamp', 'updated']
class Meta:
model = SignUp
form = SignUpForm
admin.site.register(SignUp, SignUpAdmin)
class Meta:
model = SignUp
form = SignUpForm