使用 django-select2 的表单的 NoReverseMatch
Posted
技术标签:
【中文标题】使用 django-select2 的表单的 NoReverseMatch【英文标题】:NoReverseMatch for form using django-select2 【发布时间】:2018-08-08 00:24:49 【问题描述】:我有两个视图部分,其中一个将字段保存到数据库中,另一个是自动完成字段。如何在 html 模板中同时使用它们?
第一个视图:
def stock(request):
stocks_form=StocksForm(None)
if request.method == "POST":
stocks_form =StocksForm(data=request.POST)
if stocks_form.is_valid():
instance=stocks_form.save()
instance.user=request.user
instance.save()
messages.success(request,"Successful" ,extra_tags="savestock")
else:
messages.error(request, "Error!")
else:
stocks_form=StocksForm()
return render(request,'BallbearingSite/stock.html','stocks_form':stocks_form)
第二个视图:
class StocksAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
if not self.request.user.is_authenticated():
return Stocks.objects.none()
qs = Stocks.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
urls.py
url(r'^stock/$',views.stock,name='stock'),
url(r'^stock_autocomplete/$',views.StocksAutocomplete.as_view(create_field='name'),name='stock_autocomplete'),
项目 urls.py:
urlpatterns = [
url(r'^$',views.index,name='index'),
url(r'^ajax_select/', include(ajax_select_urls)),
url(r'^admin/BallbearingSite/controlsite/$',views.sendemailview),
url(r'^admin/', include(admin.site.urls)),
url(r'^',include('BallbearingSite.urls', namespace='BallbearingSite')),
url(r'^logout/$',views.user_logout,name='logout'),
url(r'^login/$',views.user_login,name='login'),
url(r'^ckeditor/', include('ckeditor_uploader.urls')),
url('^', include('django.contrib.auth.urls')),
]
模板:
<form enctype="multipart/form-data" method="post" >
% csrf_token %
stocks_form.as_p
<input id="savestocks" type="submit" name="" value="ثبت">
</form>
forms.py:
class StocksForm(forms.ModelForm):
class Meta():
model=Stocks
fields=('name','number','suffix','brand','comment','price')
widgets =
'name': autocomplete.ModelSelect2(url='stock_autocomplete')
def clean_name(self):
return self.cleaned_data['comment'].upper()
它有这个错误:
NoReverseMatch at /stock/
Reverse for 'stock_autocomplete' with arguments '()' and keyword arguments'' not found. 0 pattern(s) tried: []
它错误地突出了这些部分:
stocks_form.as_p
和:
return render(request,'BallbearingSite/stock.html','stocks_form':stocks_form)
【问题讨论】:
如何导入您的网址?你能显示你项目的 urls.py 吗? 你的意思是这些网址? url(r'^stock/$',views.stock,name='stock'), url(r'^stock_autocomplete/$',views.StocksAutocomplete.as_view(create_field='name'),name='stock_autocomplete')
不,我的意思是你的 django 项目的网址。这似乎是您的股票应用的网址。
我把它添加到上面的代码中
太棒了!正如@Alasdair 所述,它表明您正在使用命名空间
【参考方案1】:
看起来您可能缺少 url 中的命名空间。如果stock_autocomplete
url 在BallbearingSite
命名空间中,你会这样做:
'name': autocomplete.ModelSelect2(url='BallbearingSite:stock_autocomplete')
【讨论】:
以上是关于使用 django-select2 的表单的 NoReverseMatch的主要内容,如果未能解决你的问题,请参考以下文章
如何在django-select2中使用django-filter?