- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 Django 客户用户模型为用户注册创建的表单有一个奇怪的问题。我正在运行 Django 1.6.5。
表单.py
class SignupForm(forms.ModelForm):
password1 = forms.CharField(widget=forms.PasswordInput,
label=_('Password'),
max_length=50)
password2 = forms.CharField(widget=forms.PasswordInput,
label=_('Repeat password'),
max_length=50)
class Meta:
model = RegisteredUser
fields = ("firstname", "lastname", "email", "password1", "password2",)
def clean_email(self):
existing = RegisteredUser.objects.filter(email__iexact=self.cleaned_data['email'])
if existing.exists():
raise forms.ValidationError(_('A user with that email already exists.'))
return self.cleaned_data['email']
def clean(self):
cleaned_data = super(SignupForm, self).clean()
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError(_('The two passwords did not match.'))
return cleaned_data
View .py
class SignUpView(FormView):
template_name = 'core/signup.html'
form_class = SignupForm
success_url = None
def post(self, request, *args, **kwargs):
form = self.get_form(self.get_form_class())
if form.is_valid():
return self.form_valid(request, form)
else:
return self.form_invalid(form)
def form_valid(self, request, form):
new_user = self.register(request, **form.cleaned_data)
success_url = self.get_success_url(request, new_user)
try:
to, args, kwargs = success_url
return redirect(to, *args, **kwargs)
except ValueError:
return redirect(success_url)
def register(self, request, **cleaned_data):
RegisteredUser.objects.create_user(email=cleaned_data['username'],
firstname=cleaned_data['firstname'],
lastname=cleaned_data['lastname'],
password=cleaned_data['password2'])
表单返回无效,表示“password1”和“password2”是必填字段。该值与其他字段一起清楚地显示在发布数据中。
无论我尝试过什么,'password1' 和 'password2' 都不包含在 cleaned_data 字典中。我已经尝试为这两个字段使用各种其他名称,只是为了确保“password2”不会与其他任何内容发生冲突。
我可能忽略了一些非常简单的事情:-)
谢谢!
迈克
编辑 1 - 正在使用的模板(抱歉 div-hell!):
<section class="container">
<div class="row">
<div class="col-md-6 col-sm-6">
<h2>Create an <strong>Account</strong></h2>
<form class="white-row" method="post" action="#">
{% csrf_token %}
<div class="row">
<div class="form-group">
<div class="col-md-12 col-sm-12">
<label>Firstname</label>
<input type="text" class="form-control" name="firstname">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-12 col-sm-12">
<label>Lastname</label>
<input type="text" class="form-control" name="lastname">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-12 col-sm-12">
<label>Email</label>
<input type="email" class="form-control" name="email">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-6 col-sm-6">
<label>Password</label>
<input type="password" class="form-control" name="passsword1">
</div>
<div class="col-md-6 col-sm-6">
<label>Repeat password</label>
<input type="password" class="form-control" name="passsword2">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12">
<input type="submit" value="Sign up" class="btn btn-primary pull-right push-bottom" data-loading-text="Loading...">
</div>
</div>
</form>
</div>
最佳答案
这是我如何在我的项目中执行此操作的示例:
表单.py:
class NewUserForm(forms.Form):
username = ...
password1 = forms.CharField(widget=forms.PasswordInput, required=True)
password2 = forms.CharField(widget=forms.PasswordInput, required=True)
def clean_password2(self):
password1 = self.cleaned_data.get("password1", "")
password2 = self.cleaned_data.get("password2", "")
if password1 and password2: # If both passwords has value
if password1 != password2:
raise forms.ValidationError(_(u"Passwords didn't match."))
else:
raise forms.ValidationError(_(u"Passwords can't be blank."))
return password2
views.py:
@login_required
def add_user(request):
''' Adds new user '''
if request.method == 'POST':
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
# TODO: Save in temporary table
return HttpResponse('SUBMIT')
else:
form = NewUserForm()
return render_to_response('add_user.html', {'form': form}, context_instance=RequestContext(request))
模板(表单示例):
<form action="." method="post" id="add_user_form">
{% csrf_token %}
{{ form.username }}
{{ form.password1 }}
{{ form.password2 }}
{{ form.usertype }}
<input type="submit" value="{% trans 'Save' %}" class="default"/>
</form>
{% csrf_token %}
:你需要把它放在你使用的每一个表单中
action="."
:这使得发布到实际页面
{{ form.VARIABLE_NAME}}
您需要像这样设置表单的输入,在 View 中创建表单,发送到模板,并将其用作 Django 变量使用{{ }}
。要为您的其中一个字段设置输入,例如 password1
,就像我在上面写的那样 {{ form.password1}}
,您也可以使用 {{ form.errors}}
检查所有表单错误,或 {{form.VARIABLE_NAME.errors}}
检查模板中的确切字段错误
关于python - Django Forms cleaned_data 缺少某些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24321308/
我正在尝试在 map 上绘制一些疾病事件数据的位置。 我用它来导入数据: ByTown% addProviderTiles("CartoDB.Positron")%>% addPolygons
我有一个文件调用 find.js,我使用 node find.js 运行,我的节点是版本 10 我不知道为什么我无法使用 async await。 const axios = require("axi
我有一个项目作为引用添加到 System.Web。 但是,它似乎无法获取 HttpContext。这样做: Imports System.Web _ApplicationBase = HttpCont
在互联网上找到这段代码,出于某种原因它缺少 while 循环逻辑“while(i....)”,虽然我找到了 PigLatin* 问题的其他可行解决方案,但我真的很想了解这个正在工作。 *PigLati
我工作了一整天来运行 Xampp 并在其上安装 TYPO3。现在我登录到后端,但没有显示许多管理模块,例如模板、访问等。 - 一定是我做错了什么,但我不知道。 these are the module
你好 我有编译这个问题 \begin{equation} J = \sum_{j=1}^{C} \end{equation} 我不断收到错误 missing $ inserted 这很奇怪,因
我正在尝试使用 SQLite CLI,但无法获得 generate_series功能来工作。我可以按照文档中的建议使用递归 CTE 对其进行模拟,但我似乎无法获得该链接中的任何示例。这是我的 sess
我目前正在开发我想要的软件,而软件正在安装,它可以在后台为软件创建 native 图像。 我正在考虑使用 NGEN 并将进程优先级设置为低,因为我不希望它消耗 100% CPU。但是我发现我的计算机上
我想使用 Xcodes Instruments 进行 UI 自动化测试。但似乎缺少“自动化”。我怎样才能添加这个? 最佳答案 如果您想使用自动化仪器,请使用 Xcode 7.3。 Apple 在 Xc
我目前在 JS 开发中迈出了一小步,并编写了以下链接添加器: const button = document.getElementById('button') const listdiv = docu
此代码有什么问题: NSError *error = nil; [SFHFKeychainUtils deleteItemForUsername:@"IAPNoob01" andServiceName
出于某种原因,在安装和配置(我认为)一切之后,com.adobe.utils.AGALMiniAssembler 不见了,其他一切正常。 我认为我已尽一切努力让孵化器正常工作,但显然我错过了一步。 如
我有一个名为 new 的方法。调用 new 时,我传递了一个参数,但是当我运行应用程序时,出现没有参数或参数为空的错误。 StepReader.pm package StepReader; use s
安装 gtk 1.2(包名 gtk1)和 macports chokes 在最终的 make 中,在 libintl.h 的第 440 行。 extern locale_t libintl_newlo
我用按钮创建表格。 这是javascript代码: function layersListTable(layers) { var content =''; $.each($(layer
我在使用此 javascript 时遇到此错误,任何人都可以帮我弄清楚我做错了什么吗? $(this).prepend('Check availability »'); 它给我错误 mis
我有一个独立的工具链 NDK13b、api19、llvm 3.8 编译器、arm 32 位、带有 libcpp(llvm C++ 库) 我想避免依赖 libgcc,所以我构建了 compiler-rt
我按照一些教程使用 phonegap 的条形码扫描器插件。但是当我从现有源创建一个新的 android 项目来创建条码库时 (step 6 in this page)我收到错误:“AndroidMan
我现在尝试在 Eclipse 中打开我的布局 xml 文件。我只得到错误 No XML content. Please add a root view or layout to your docume
我的 android-sdk-windows\tools 目录中缺少层次结构查看器工具。 工具链接: http://developer.android.com/guide/developing/too
我是一名优秀的程序员,十分优秀!