Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 组合表单和模型表单集的NoReverseMatch错误_Python_Django_Python 3.x_Django 2.1 - Fatal编程技术网

Python 组合表单和模型表单集的NoReverseMatch错误

Python 组合表单和模型表单集的NoReverseMatch错误,python,django,python-3.x,django-2.1,Python,Django,Python 3.x,Django 2.1,我一直在尝试创建一个for,它使用model_formset结合父模型和子模型,方法是在本文中遵循用例3 模型 类购物清单(models.Model): name=models.CharField(最大长度=50) description=models.TextField(最大长度=2000) created=models.DateField(auto\u now\u add=True) 创建人=models.ForeignKey(用户,相关的\u name='list',在\u delete=

我一直在尝试创建一个for,它使用model_formset结合父模型和子模型,方法是在本文中遵循用例3

模型
类购物清单(models.Model):
name=models.CharField(最大长度=50)
description=models.TextField(最大长度=2000)
created=models.DateField(auto\u now\u add=True)
创建人=models.ForeignKey(用户,相关的\u name='list',在\u delete=models.CASCADE上)
last_updated=models.DateTimeField(自动_now=True)
定义(自我):
返回self.name
类别项(models.Model):
name=models.CharField(最大长度=80,唯一性=True)
amount=models.IntegerField(默认值=1)
shoppinglist=models.ForeignKey(shoppinglist,on_delete=models.CASCADE)
定义(自我):
返回self.name
网址
urlpatterns=[
url(r'^shoppinglist/(?P\d+)/$,views.shoppinglist\u list,name='shoppinglist\u list'),
url(r“^shoppinglist/new/$”,views.create带有项目的shoppinglist,name='shoppinglist\u new'),
]
形式
class ShoppingListForm(forms.ModelForm):
description=forms.CharField(
widget=forms.Textarea(
attrs={'rows':5,'占位符':'告诉我们您的列表?'}
), 
最大长度=4000,
help_text='文本的最大长度为4000个字符。'
)
类元:
模型=购物清单
字段=['name','description']
ItemFormset=modelformset\u工厂(
项目,,
字段=(‘名称’、‘金额’),
额外=1,
小部件={
“名称”:forms.TextInput(
属性={
“类”:“窗体控件”,
“占位符”:“在此处输入项目名称”
}
)
},
can_delete=True
)
看法
@需要登录\u
def使用物品创建购物清单(请求):
template_name='list_with_items.html'
如果request.method==“GET”:
listform=ShoppinglistForm(request.GET或None)
formset=ItemFormset(queryset=Item.objects.none())
elif request.method==“POST”:
listform=ShoppinglistForm(request.POST)
formset=ItemFormset(request.POST)
如果listform.is_valid()和formset.is_valid():
shoppinglist=listform.save(commit=False)
shoppinglist.created_by=request.user
shoppinglist=listform.save()
对于formset中的表单:
item=form.save(commit=False)
item.shoppinglist=shoppinglist
item.save()
返回重定向('shoppinglist\u list',pk=shoppinglist.pk)
返回渲染(请求、模板名称、{
“listform”:listform,
“formset”:formset,
})
模板
{%block content%}
{%csrf_令牌%}
列表名
{{listform.name}
{%if listform.first_name.errors%}
{listform.first_name.errors%}中的错误为%
{{error | escape}
{%endfor%}
{%endif%}
描述
{{listform.description}}
{%if listform.description.errors%}
{listform.description.errors%中的错误为%s}
{{error | escape}
{%endfor%}
{%endif%}
{{formset.management_form}
{formset%中表单的%s}
{{form.amount}}
{%if form.amount.errors%}
{form.amount.errors%中的错误为%1}
{{error | escape}
{%endfor%}
{%endif%}
{{form.name}
{%if form.name.errors%}
{%form.name.errors%}
{{error | escape}
{%endfor%}
{%endif%}
{%endfor%}
{%if formset.non_form_errors%}
{%formset.non_form_errors%}
{{error | escape}
{%endfor%}
{%endif%}
创造
{%endblock%}
{%block extra_js%}
$('.item formset').formset({
addText:“添加项”,
deleteText:“删除”
});
{%endblock%}
我已经修改了代码,这样用户将被带到新创建的父模型,但是当我转到页面时,我得到了一个NoReverseMatch错误

Reverse for 'shoppinglist_list' with arguments '('',)' not found. 1 pattern(s) tried: ['shoppinglists/(?P<pk>\\d+)/$']

找不到参数为“(“”,)”的“shoppinglist\u list”的反向。已尝试1个模式:[“ShoppingList/(?P\\d+/$”]
来自:

如果使用commit=False调用save(),则它将返回一个尚未保存到数据库的对象。在本例中,由您对生成的模型实例调用save()

执行
shoppinglist=listform.save(commit=False)
之后,您在
shoppinglist
变量中获得了模型实例

所以你应该做
shoppinglist=shoppinglist.save()
而不是
shoppinglist=listform.save()

保存模型实例后,可以从以下位置访问
shoppinglist.pk

如果使用commit=False调用save(),则它将返回一个尚未保存到数据库的对象。在本例中,由您对生成的模型实例调用save()

执行
shoppinglist=listform.save(commit=False)
之后,您在
shoppinglist
变量中获得了模型实例

所以你应该做
shoppinglist=shoppinglist.save()
而不是
shoppinglist=listform.save()


保存模型实例后,您可以访问
shoppinglist.pk

只需关闭此票据模板中有一个我已更正的输入错误,导致此问题。因此,上面的代码现在可以工作了。

为了关闭此票据,模板中有一个输入错误,我已经更正了,导致了此问题。因此,上面的代码现在可以工作了。

此错误与表单或表单集无关。它不是来自这个代码。显示模板。@DanielRoseman我现在已经添加了模板。Thi
Reverse for 'shoppinglist_list' with arguments '('',)' not found. 1 pattern(s) tried: ['shoppinglists/(?P<pk>\\d+)/$']