Je sais que je peux transmettre des valeurs d'objet via un modèle d'URL et les utiliser dans les fonctions de vue. Par exemple:Transmission de données d'objet via l'URL
(r'^edit/(?P<id>\w+)/', edit_entry),
peut être utilisé comme:
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})
Mais comment puis-je passer une valeur d'un champ de modèle (autre que « id ») dans l'URL? Par exemple, j'ai un modèle de base abstrait avec un champ "job_number" qui est partagé par les modèles enfants "OrderForm" et "SpecReport". Je veux cliquer sur "job_number" sur le bon de commande et appeler le rapport de spécifications pour ce même numéro de job. Je peux créer un
href="/../specifications/{{ record.job_number }}
passer l'info à l'URL, mais je sais déjà que cette syntaxe regex est incorrecte:
(r'^specifications/(?P<**job_number**>\w+)/', display_specs),
et je ne peux saisir l'job_number dans la vue de la même façon que je pourrait un id:
def display_specs(request, job_number):
records = SpecReport.objects.filter(pk=job_number)
tpl = 'display.html'
return render_to_response(tpl, {'records': records })
y at-il une approche facile à ceci ou est-il plus compliqué que je pense qu'il est?
le code modifié est la suivante:
(r'^specdisplay/?agencyID=12/', display_specs),
et:
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 })
ne sais pas comment filtrer. pk n'est plus applicable.
Je pense que votre seul problème restant est le regex url :) tout après le point d'interrogation (y compris) doit aller. Ceux-ci sont appelés paramètres GET et ne font pas partie des éléments correspondants. –