- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试扩展 Django 注册以包含我自己的注册表单。原则上这是相当简单的。我只需要编写自己的表单( CustomRegistrationForm
),它是原始表单( RegistrationForm
)的子节点。然后我可以通过使用 django 注册的 user_registered 信号来处理我的特定输入。
所以这就是我所做的:
urls.py:
from django.conf.urls import patterns, include, url
from registration.views import register
from forms import CustomRegistrationForm
from django.contrib import admin
import regbackend
admin.autodiscover()
urlpatterns = patterns('',
url(r'^register/$', register, {'backend': 'registration.backends.default.DefaultBackend', 'form_class': CustomRegistrationForm, 'template_name': 'custom_profile/registration_form.html'},
name='registration_register'),
)
from django import forms
from models import UserProfile
from forms import CustomRegistrationForm
def user_created(sender, user, request, **kwargs):
form = CustomRegistrationForm(data=request.POST, files=request.FILES)
if form.is_valid(): # HERE: always fails
user_profile = UserProfile()
user_profile.user = user
user_profile.matriculation_number = form.cleaned_data['matriculation_number']
user_profile.save()
from registration.signals import user_registered
user_registered.connect(user_created)
from models import UserProfile
from django import forms
from registration.forms import RegistrationForm
from django.utils.translation import ugettext_lazy as _
attrs_dict = {'class': 'required'}
class CustomRegistrationForm(RegistrationForm):
matriculation_number = forms.CharField(widget=forms.TextInput(attrs=attrs_dict),
label=_("Matriculation number"),
max_length=12,
error_messages={'invalid': _("This value has to be unique and may contain only numbers.")},
initial=108)
def clean_matriculation_number(self):
print "Validating matriculation number."
data = self.cleaned_data['matriculation_number']
if len(data) != 12:
raise forms.ValidationError(_("Matriculation number consists of exactly 12 digits."))
return data
is_valid()
函数,因为它总是返回
False
.即使没有错误!那么有什么问题呢?我花了几个小时在这个上,我已经不知道了:(
最佳答案
原因form.is_valid()
失败可能是因为表单的“clean_username”函数检查传递给它的用户名是否已经存在。由于在创建 User 对象并将其添加到数据库后发送信号,因此表单每次都无法通过此测试。我的猜测是如果您登录 form.cleaned_data
之后 is_valid()
返回 False
,您将获得除用户名之外的所有字段的列表。form.data
如果表单 clean_ 函数进行了任何更改,则可能不包含字段的更改值(我在 form.data 上找不到太多文档)。
为了避免这可能导致的潜在问题,我为我的自定义注册表单创建了两个类:
# I use this one for validating in my create_user_profile function
class MyRegistrationFormInternal(forms.Form):
# Just an example with only one field that holds a name
name = forms.CharField(initial="Your name", max_length=100)
def clean_name(self):
# (Optional) Change the name in some way, but do not check to see if it already exists
return self.cleaned_data['name'] + ' foo '
# This one is actually displayed
class MyRegistrationForm (MyRegistrationFormInternal):
# Here is where we check if the user already exists
def clean_name(self):
modified_name = super(MyRegistrationForm, self).clean_name()
# Check if a user with this name already exists
duplicate = (User.objects.filter(name=modified_name)
if duplicate.exists():
raise forms.ValidationError("A user with that name already exists.")
else:
return modified_name
MyRegistrationFormInternal
运行您的 POST 数据,而不是使用 form.data(在某些方面可能仍然是“不干净的”)。 , 和
is_valid()
不应该总是返回 false。
关于django 表单 is_valid 总是失败(扩展 django-registration 表单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386298/
我有两个模型 class Friend(models.Model): me = models.ForeignKey(User) friend = models.Foreig
在我的 Django 应用程序中,即使我添加了与管理应用程序相同的数据,表单也永远不会返回 true。我的 model.py 看起来像: from django.db import models fr
我有一个EmailField(primary_key=True)。我使用 ModelForm 向用户呈现表单,并在回发时调用 form.is_valid()。 我在该字段中看到两种类型的错误。一是主键
这是 models.py from django.db import models class RegisterForm(models.Model): fname = mode
我有一个 View ,它验证表单中的数据,该表单只包含有关项目的一些基本信息。我很困惑 is_valid即使在阅读后,方法也可以在这里工作 this .如果用户没有输入一些必填字段,如名称或图像 1,
我是网络开发的真正初学者。以下代码在 is_valid() 处失败检查。但我不明白为什么:表单是否应该从 POST 数据中获取其数据? 型号: class Statement(models.Model
伙计们!我有这个用户模型的序列化器类 class UserSerializer(serializers.ModelSerializer): username = serializers.Reg
git repo : django tutorial 我一直在关注上述 django 项目,该项目着眼于创建人与人之间的聊天。我遇到过这部分: def message_list(request, se
我正在学习 Django,并且偶然发现了一些我需要帮助的东西: forms.py class UserForm(forms.ModelForm): password1 = forms.Char
在我的 Django 应用程序中,我有一个从简单(非模型)表单创建的表单集,其中 extra=1 (以允许 javasript 稍后添加更多表单)。 class SomeForm(forms.Form
我在掌握如何执行此操作时遇到了一些麻烦。我已经尽最大努力搜索谷歌,但没有任何运气。 我将从一些代码开始并解释我正在尝试做的事情: 模型.py class Action(models.Model):
我有一个 django charField,通过 is_valid() 方法进行检查。用户应该在此字段中输入有效的逻辑表达式,因此我编写了一个解析方法,如果表达式不正确,该方法会引发异常。 如何增强
如何在调用 is_valid() 方法后更改表单字段值? 在使用 form.is_valid 验证数据后,我试图更改字段 u_id(这是必需的)。我可以更改数据,甚至可以将其显示在 HttpRespo
我正在尝试使用Django 1.10.5建立一个网站。目前,我正在研究一种在前端编辑数据库对象的方法。我的计划是定义一个表单“EditForm”,用户在其中输入要编辑的对象的ID。当我仅在实际站点上测
我有一个简单的 Django 代码。 models.py 文件中有我的模型和表单: from django.db import models from django.forms import Mode
问题 我正在尝试让 LightOpenID 与 Google Apps Enterprise 帐户一起使用。我收到“找不到服务器!”当我调用 validate() 时。我模拟了一个快速页面来测试 Li
我创建了一个表单,它是 forms.ModelForm。在“ View ”方面,我创建了一个 generic.UpdateView View 。 在这两个不同的类中,一侧有 is_valid(),另一
我有这些模型: class Gallery(models.Model): HeadImage = models.ImageField(upload_to="gallery",blank=True
Form.is_valid() 始终返回 false,并且从不显示任何类型的错误。以下是 forms.py、views.py 和 template/transaction_add_page.html
我使用 modelformset_factory 创建了一个简单的联系表单,以使用数据库模型在 View 中构建表单。我遇到的问题是 save() 之前的 is_valid() 检查不起作用。当我提交
我是一名优秀的程序员,十分优秀!