- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
出于某种原因,我的表单集在提交后无法验证。关于这可能发生的方式有什么想法吗?
class Department(models.Model):
department = models.CharField(verbose_name = "Department Name", max_length=100)
description = models.TextField(verbose_name = "Description", blank=True, null=True)
sp_description = models.TextField(verbose_name = "Description (Spanish)", blank=True, null=True)
phone = PhoneNumberField()
phone_ext = models.CharField(max_length=10, blank=True)
#Relations
provider = models.ForeignKey(Provider, blank=True, null=True)
services_offered = models.ManyToManyField(ServiceType)
def __unicode__(self):
return self.department
def display_step5(request):
msg = ''
email = request.session.get('email')
provider_obj = retrieve_provider_instance(email)
AddDepartmentFormSet = inlineformset_factory(Provider, Department, extra=0)
if is_authenticated(request):
AddDepartmentFormSet = inlineformset_factory(Provider, Department, extra=0)
if request.method=='POST':
if 'add_department' in request.POST:
cp = request.POST.copy()
cp['department-TOTAL_FORMS'] = int(cp['department-TOTAL_FORMS'])+ 1
new_department = AddDepartmentFormSet(cp, prefix='department', instance=provider_obj)
elif 'submit' in request.POST:
formset = AddDepartmentFormSet(request.POST, instance=provider_obj)
instances = formset.save(commit=False)
for instance in instances:
instance.provider = provider_obj
instance.save()
return HttpResponse("Departments have been added")
else:
new_department = AddDepartmentFormSet(prefix='department', instance=provider_obj)
else:
return HttpResponseRedirect(reverse('health.register.views.display_auth'))
return render_to_response('step5-test.html',
{'department': new_department}, context_instance=RequestContext(request))
<form method='post' action='{{request.path}}'>{% csrf_token %}
<fieldset>
<legend>Departments</legend>
{{ department.management_form }}
{% for form in department.forms %}
<HR> <div><table>{{form.as_table}}</table></div>
{% endfor %}
<BR/>
<input title='Add a new department' type='submit' name='add_department' value='Add-Another-Department' />
</fieldset>
<BR/><BR/>
<input title='Submit this form' type='submit' name='submit' value='Submit' />
</form>
跟进(解决方案):
Brant 提供了一些关于错误发生原因的见解。就我而言,他的洞察力帮助我构建了一个更适合我的情况的 hack。此 hack 似乎适用于可能已在模板中以某种方式修改的表单集。就我而言,我的表单集变得复杂并且需要一些 ajax 来使其更加用户友好。
“retrieve_provider_instance(email)”是一种根据数据库中设置的各种条件动态检索提供者对象的方法(大约 200 行代码)。
经过大量调试后,以下 hack 对我有用。我通过在模板的“for”循环中添加以下隐藏字段解决了这个问题
{% {for form in formset.forms %}
<tr>
<td>
{% if form.instance.pk %} <!--- if instance already exists on db --->
{{ form.DELETE }}
<input type='hidden' name="department_set-{{ forloop.counter0 }}-id" id="id_department_set-{{ forloop.counter0 }}-id" value={{ form.instance.pk }} />
{% endif %}
Name: <br/> {{ form.department}} <br/>
Phone Number: <br/> {{ form.phone }} <br/>
Phone Ext: <br/> {{ form.phone_ext }}</td>
<td>Description: <br/> {{ form.description }}</td>
<td>Description (Spanish): <br/> {{ form.sp_description }}</td>
<td>Services Provided: <br/> {{ form.services_offered }}</td>
<td></td>
</tr>
{% endfor %}
我接受了 Mark 的回答,因为它更适用于我提出的具体问题。希望这对将来尝试实现此示例的其他用户有所帮助。事实上,在提交时分配“前缀”是正确的方法,也是最有意义的。
感谢您的所有回复。
最好的问候,马特
跟进:我想我可能已经找到了部分问题。但是,还没有解决。
以下是一些可能有助于解决问题的附加信息。 不正确的 POST 数据会把事情搞砸吗?如果是这样,我该如何解决这个问题?
这是我提交表单集后发生的情况(在本例中只有一个表单):
回溯如下:
File "/home/mhjohnson/webapps/resourcedb/lib/python2.6/django/forms/formsets.py" in _management_form 68. raise ValidationError('ManagementForm data is missing or has been tampered with')
这是我的 POST 数据:
department-0-phone_ext -----> u'222'
department-0-id -----> u''
department-0-services_offered -----> u'2'
department-0-phone -----> u'222-222-2222'
department-INITIAL_FORMS -----> u'0'
submit -----> u'Submit'
department-MAX_NUM_FORMS -----> u''
department-0-department -----> u'Test 1'
department-0-provider -----> u''
department-TOTAL_FORMS -----> u'1'
csrfmiddlewaretoken -----> u'92a39322b16ed7e5e10dbd6c5ac64bf4'
department-0-description -----> u'Blah blah'
department-0-sp_description -----> u'....'
有什么想法吗?
最佳答案
你的问题在这里:
if request.method=='POST':
if 'add_department' in request.POST:
cp = request.POST.copy()
cp['department-TOTAL_FORMS'] = int(cp['department-TOTAL_FORMS'])+ 1
new_department = AddDepartmentFormSet(cp, prefix='department', instance=provider_obj)
elif 'submit' in request.POST:
formset = AddDepartmentFormSet(request.POST, instance=provider_obj)
instances = formset.save(commit=False)
for instance in instances:
instance.provider = provider_obj
instance.save()
return HttpResponse("Departments have been added")
else:
new_department = AddDepartmentFormSet(prefix='department', instance=provider_obj)
如果没有 POST,则传递前缀“department”。如果“add_department”在 POST 中,则传递“department”前缀。但是,当“提交”在 POST 中时,您不会传递前缀。没有前缀,表单集无法在 POST 中找到正确的数据。
关于python - Django:缺少 ManagementForm 数据...Formset 将无法验证。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4638693/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!