如何在Django中从视图设置初始表单字段值

时间:2019-06-22 01:28:00

标签: python django forms

我正在尝试从我的视图中设置表单字段的初始值。我已经阅读了文档和此处的其他一些问题,无法确定为什么我的案子无法正常工作。

在一种形式(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 +)/ $']

1 个答案:

答案 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):
    ...
相关问题