2010-01-22 7 views
0

This application returns schoolmates of lawyers.Modèles Django: comment enregistrer un élément dans une boucle {% for%}?

Lorsqu'un utilisateur ne recherche que le prénom et there are more than 1 result je laisse la requête dans le formulaire et je leur demande d'entrer un nom de famille. Mais je pensais que ce serait plus agréable si l'utilisateur cliquait sur l'un des noms et que les résultats de la recherche étaient renvoyés directement. (À ce stade, le lien vous mènera au formulaire de recherche à nouveau.)

Dans le modèle de la requête et le nom que j'ai besoin sont à l'intérieur de la boucle {% for lawyer in lawyers %} comme attributs: lawyer.first et lawyer.last. Je ne pouvais pas comprendre comment les enregistrer pour créer une requête. Pouvez-vous m'aider avec comment résoudre ce problème?

Remarque: Le modèle est ci-dessous mais j'ai mis le view function dans pastebin.com. Il fait 60 lignes, je ne savais pas si je devrais le poster ici.

Merci.

<html> 
<head> 
    <title>Search results</title> 
</head> 
<body> 

<p>You searched for <strong>{{ first|capfirst }} </strong>.</p> 

<p>There are {{ lawyers|length }} {{ first|capfirst }} in the database. Please select one.</p> 

{% for lawyer in lawyers %} 
    <ul><li><a href="/search/">{{ lawyer.first }} {{ lawyer.last }} {{ lawyer.firm_name }} {{ lawyer.school}} class of {{ lawyer.year_graduated }}</a></li></ul> 
{% endfor %} 

<form action="" method="get"> 
{{ form.as_p }} 
<input type="submit" value="Submit"> 
    </form> 
</body> 
</html> 

Modifier

Ai-je besoin de créer une nouvelle fonction de vue comme celui-ci?

def new_query(request): 
    last_name = request.GET.get('lawyers.last') 
    first_name = request.GET.get('lawyer.first') 
    .... 

Répondre

1

Étant donné que vous utilisez GET pour votre formulaire, vous pouvez émuler complètement une soumission de formulaire avec un lien normal.

<a href="?first_name={{lawyer.first}}&last_name={{lawyer.last}"> 

ce envoie une requête à l'URL actuelle (parce que nous ne sommes pas spécifier une URL, juste paramètres GET. Ceci est l'équivalent de

<form action="" method="get"> 

mais en ajoutant à la forme 2 paramètres, Si vous avez des paramètres supplémentaires dans votre formulaire eux aussi

1

Vous pouvez les ajouter en tant que paramètres GET

<a href="/search/?first={{lawyer.first}}&last={{lawyer.last}"> 

ensuite par request.GET, vous pouvez accéder aux éléments transmis.

+0

Merci. Est-ce que je crée une nouvelle fonction de vue comme j'ai ajouté dans la modification à la question? Pouvez-vous donner plus de détails ou laissez-moi savoir où regarder? – Zeynel

+1

@Zeynel: Non, vous n'avez pas besoin de créer une nouvelle vue. Essayez-le. –

Questions connexes