小编kja*_*nal的帖子

通过URL传递对象数据

我知道我可以通过URL模式传递对象值,并在视图函数中使用它们.例如:

(r'^edit/(?P<id>\w+)/', edit_entry),
Run Code Online (Sandbox Code Playgroud)

可以像:

def edit_entry(request, id):
        if request.method == 'POST':
                a=Entry.objects.get(pk=id)
                form = EntryForm(request.POST, instance=a)
                if form.is_valid():
                        form.save()
                        return HttpResponseRedirect('/contact/display/%s/' % id)
        else:
                a=Entry.objects.get(pk=id)
                form = EntryForm(instance=a)
        return render_to_response('edit_contact.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

但是如何从URL中的模型字段("id"除外)传递值?例如,我有一个抽象的基本模型,其字段为"job_number",由子模型"OrderForm"和"SpecReport"共享.我想点击订单上的"job_number",并为同一个工作号码调用规格报告.我可以创建一个

href="/../specifications/{{ record.job_number }}
Run Code Online (Sandbox Code Playgroud)

将信息传递给url,但我已经知道这个正则表达式语法不正确:

(r'^specifications/(?P<**job_number**>\w+)/', display_specs),
Run Code Online (Sandbox Code Playgroud)

我也不能像在id中那样捕获视图中的job_number:

def display_specs(request, job_number):
    records = SpecReport.objects.filter(pk=job_number)
    tpl = 'display.html'
    return render_to_response(tpl, {'records': records })
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法,还是比我认为的更复杂?

修改后的代码如下:

(r'^specdisplay/?agencyID=12/', display_specs),
Run Code Online (Sandbox Code Playgroud)

和:

def display_specs(request, agencyID):
    agencyID= request.GET.get('agencyID')
    records = ProductionSpecs.objects.filter(pk=id)
    tpl = 'display_specs.html'
    return render_to_response(tpl, {'records': records })
Run Code Online (Sandbox Code Playgroud)

不知道如何过滤.pk不再适用.

django django-urls

2
推荐指数
1
解决办法
7488
查看次数

将值传递给HttpResponse请求

我有一个urlpattern,它带来了一个模板,允许查看模型实例的字段:

(r'^display/(?P<id>\w+)/', display_record),
Run Code Online (Sandbox Code Playgroud)

我还有一个视图功能,允许编辑单个实例.保存对象后,它只返回到同一个模板:

if form.is_valid():
        form.save()
        return HttpResponseRedirect('/')
Run Code Online (Sandbox Code Playgroud)

保存后,如何刷新显示模板,而不是刷新相同的视图?代码看起来像下面这样但我需要一种方法将对象"id"传递给HttpResponse请求:

def edit_record(request, id):
        if request.method == 'POST':
                a=ProjectRecord.objects.get(pk=id)
                form = RecordForm(request.POST, instance=a)
                if form.is_valid():
                        form.save()
                        return HttpResponseRedirect**('/display/(?P<id>\w+)/')**
        else:
                a=ProjectRecord.objects.get(pk=id)
                form = RecordForm(instance=a)
        return render_to_response('productionModulewire.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

django django-views

0
推荐指数
1
解决办法
2494
查看次数

标签 统计

django ×2

django-urls ×1

django-views ×1