passing object data through URL
django, django-urls
Solution
Yes, you are making this a little more complicated that it is.
In your `urls.py` you have:
(r'^edit/(?P<id>\w+)/', edit_entry),
Now you just need to add the almost identical expression for display_specs:
(r'^specifications/(?P<job_number>\w+)/', display_specs),
Parenthesis in the regex identifies a group and the `(?P<name>...)` defines a named group which will be named `name`. This name is the parameter to your view.
Thus, your view will now look like:
def display_specs(request, job_number):
...
Finally, even though this will work, when you redirect to the view, instead of using:
HttpResponseRedirect('/path/to/view/%s/' % job_number)
Use the more DRY:
HttpResponseRedirect(
reverse('display_specs', kwargs={'job_number': a.job_number}))
Now if you decide to change your resource paths your redirect won't break.
For this to work you need to start using named urls in your urlconf like this:
url(r'^specifications/(?P<job_number>\w+)/', display_specs, name='display_specs'),
Problem
I know that I can pass object values through a URL pattern and use them in view functions. For instance: ``` (r'^edit/(?P<id>\w+)/', edit_entry), ``` can be utilized like: ``` 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}) ``` But how do I pass a value from a model field (other than "id") in the url? For instance, I have an abstract base model with a field "job_number" that is shared by child models "OrderForm" and "SpecReport". I want to click on the "job_number" on the order form and call the Spec Report for that same job number. I can create an ``` href="/../specifications/{{ record.job_number }} ``` to pass the info to the url, but I already know that this regex syntax is incorrect: ``` (r'^specifications/(?P<**job_number**>\w+)/', display_specs), ``` nor can I capture the job_number in the view the same way I could an id: ``` def display_specs(request, job_number): records = SpecReport.objects.filter(pk=job_number) tpl = 'display.html' return render_to_response(tpl, {'records': records }) ``` Is there an easy approach to this or is it more complicated than I think it is? the amended code is as follows: ``` (r'^specdisplay/?agencyID=12/', display_specs), ``` and: ``` 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 }) ``` not sure how to filter. pk is no longer applicable.