如何解决Django - 带有松脆表单的表单集 - 缺少管理表单数据
我正在尝试呈现此表单集:
ProductFormSet = modelformset_factory(
model=Product,fields='__all__',extra=5,)
class ProductFormSetHelper(FormHelper):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.form_tag = False
self.layout = Layout(
Row(
'productCategory','name','measurement_unit',)
)
self.render_required_fields = True
使用此视图:
def product_create(request):
helper = ProductFormSetHelper()
context = {
'helper': helper,'title': 'Nuovi Prodotti',}
if request.method == 'GET':
formset = ProductFormSet(queryset=Product.objects.none())
context['formset'] = formset
elif request.method == 'POST':
formset = ProductFormSet(request.POST)
context['formset'] = formset
if formset.is_valid():
formset.save()
messages.success(request,'Prodotti aggiunti correttamente',fail_silently=True)
return HttpResponseRedirect(reverse('warehouse:products_list'))
else:
return render(request,'warehouse/product_create.html',context)
return render(request,context)
和这个模板:
{% extends "masterpage.html" %}
{% load static %}
{% block headTitle %}
<title>Nuovo Prodotto</title>
{% endblock %}
{% block contentHead %}
{% endblock %}
{% block contentBody %}
{% load document_tags %}
{% load custom_tags %}
{% load crispy_forms_tags %}
<FORM method="POST" autocomplete="off">
<div class="alert alert-info">
{{ title }}
</div>
{{ formset.management_form }}
{% crispy formset helper %}
<input type="submit" class="btn btn-primary margin-left" value="SALVA">
</FORM>
{% endblock %}
问题是,当我提交表单时,我收到:ValidationError:管理表单数据丢失!首先,使用脆皮形式应该包含管理数据,其次即使我使用标签显式调用,我仍然会收到 ValidationError。
在我在线搜索的每个论坛中,每个人都缺少管理表单标签,所以我不知道哪里出了问题......
有什么想法吗?
非常感谢
C
解决方法
在您的 Post 方法中,您没有包含“查询集”
formset = ProductFormSet(queryset=Product.objects.WHATEVER_YOU_CHOOSE,request.POST)
和酥脆的形式
{% load crispy_forms_tags %}
<form method="post">
{% csrf_token %}
{{ formset|crispy }}
{{ formset.management_form }}
<input type="submit" class="btn btn-primary margin-left" value="SALVA">
</form>
并且因为您没有在 get_context_data 功能中工作,所以保持简单
context = {'formset':formset}
文档中的示例
from django.forms import modelformset_factory
from django.shortcuts import render
from myapp.models import Author
def manage_authors(request):
AuthorFormSet = modelformset_factory(Author,fields=('name','title'))
if request.method == "POST":
formset = AuthorFormSet(
request.POST,request.FILES,queryset=Author.objects.filter(name__startswith='O'),)
if formset.is_valid():
formset.save()
# Do something.
else:
formset = AuthorFormSet(queryset=Author.objects.filter(name__startswith='O'))
return render(request,'manage_authors.html',{'formset': formset})
,
希望它可以帮助其他人。由于我在配置千位分隔符时遇到问题,我尝试通过添加 |intcomma 过滤器来更改 /templates/django/forms/widgets 中的 input.html 小部件。 这改变了管理表单数据(一个字段默认设置为 1000),从而破坏了整个表单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。