我正在尝试从我的视图中设置表单字段的初始值。我已经阅读了文档和此处的其他一些问题,无法确定为什么我的案子无法正常工作。
在一种形式(CreateOrderForm)中,我为“引用”字段输入一个值。在我的下一个视图中,我使用.get检索该输入,然后尝试将CreateManifestForm中的'reference'字段默认为相同。我没有错误,但是没有任何价值。
以下是我要尝试的内容:
FORMS.PY
class CreateOrderForm(forms.ModelForm):
class Meta:
model = Orders
fields = ('reference', 'ultimate_consignee', 'ship_to', 'vessel', 'booking_no', 'POL',
'DOL', 'COO', 'POE', 'ETA', 'pickup_no', 'terms', 'sales_contact', 'trucking_co', 'loading_loc', 'inspector', 'total_cases', 'total_fob', 'freight_forwarder', 'commodity', 'is_airshipment', 'credit')
class CreateManifestForm(forms.ModelForm):
class Meta:
model = Manifests
fields = ('reference', 'cases', 'description', 'count')
URLS.PY
url(r'^add_manifest/(?P<reference_id>\d+)/$', add_manifest, name='add_manifest')
VIEWS.PY
def add_order(request):
if request.method == "POST":
form = CreateOrderForm(request.POST)
if form.is_valid():
reference_id = form.cleaned_data.get('reference')
form.save()
return redirect('add_manifest', kwargs={'reference_id': reference_id})
else:
form = CreateOrderForm()
objectlist = Customers.objects.all()
context = {
'form': form,
'objectlist': objectlist,
}
return render(request, 'add_order.html', context)
def add_manifest(request, reference_id):
if request.method == "POST":
form = CreateManifestForm(request.POST)
if form.is_valid():
form.save()
return redirect('add_manifest')
reference_id = request.POST.get('reference')
form = CreateManifestForm(initial={'cases': reference_id})
manifests = Manifests.objects.all().filter(reference=reference_id)
context = {
'form': form,
'manifests': manifests,
}
return render(request, 'add_manifest.html', context)
我希望add_manifest视图中的引用字段等于CreateOrderForm中“引用”中输入的值,但是我什么也没得到。
回溯
内部文件“ /Library/Python/2.7/site-packages/django/core/handlers/exception.py” 39. response = get_response(request)
_get_response中的文件“ /Library/Python/2.7/site-packages/django/core/handlers/base.py” 187. response = self.process_exception_by_middleware(e,request)
_get_response中的文件“ /Library/Python/2.7/site-packages/django/core/handlers/base.py” 185. response = wrapd_callback(request,* callback_args,** callback_kwargs)
在add_order中的文件“ /Users/andrews/Desktop/WBU/web_unit/unit/views.py” 61. return redirect('add_manifest',kwargs = {''reference_id':reference_id})
重定向文件“ /Library/Python/2.7/site-packages/django/shortcuts.py” 56. return redirect_class(resolve_url(to,* args,** kwargs))
resolve_url中的文件“ /Library/Python/2.7/site-packages/django/shortcuts.py” 147. return reverse(to,args = args,kwargs = kwargs)
文件“ /Library/Python/2.7/site-packages/django/urls/base.py”反过来 91. return force_text(iri_to_uri(resolver._reverse_with_prefix(view,prefix,* args,** kwargs)))
_reverse_with_prefix中的文件“ /Library/Python/2.7/site-packages/django/urls/resolvers.py” 389.(lookup_view_s,args,kwargs,len(模式),模式)
异常类型:/ add_order处的NoReverseMatch 异常值:找不到带有参数'()'和关键字参数'{'kwargs':{'reference_id':u'45643'}}'的'add_manifest'。尝试了1个模式:['add_manifest /(?P \ d +)/ $']
答案 0 :(得分:0)
您永远不会将reference_id传递给add_manifest,因此无法在其中使用它。
您需要在URL中传递它-您注释的代码是正确的,您只需要遵循并将其添加到urlpattern和视图中即可:
path('add-manifest/<int:reference_id>/', views.add_manifest, name='add-manifest')
...
# in add-order
return redirect('add_manifest', reference_id=reference_id)
...
def add_manifest(request, reference_id):
...