2009-02-11 13 views
1

J'ai passé trop de temps sur ce problème et je commence à penser qu'il est impossible de faire dans Django. Je tire une liste de noms de pathogènes à partir d'une base de données postgres à une liste déroulante. L'utilisateur sélectionne le pathogène, ce qui nécessite que l'identifiant soit retransmis via django à la base de données pour une récupération ultérieure de plus de données. Veuillez voirdjango variable de formulaire

http://dpaste.com/119358/ pour le code déroulant.

Le problème est que l'instruction select id = est au-dessus du point où le formulaire récupère l'ID de pathologie. Les instructions django doivent être placées à ce point ou le menu déroulant ne fonctionne pas. Est-ce que quelqu'un a écrit quelque chose de similaire et trouvé une solution?

Max

+0

pourquoi ça ne marche pas? manque-t-il une balise de fermeture pour sélectionner? – hasen

+0

Je pense que la question n'est pas valide. Pourquoi l'ID de votre balise de sélection doit-il avoir une quelconque relation avec l'identifiant des enregistrements de pathologie individuels dans votre base de données? Le chariot et le cheval dans ce problème ne doivent pas être connectés de quelque façon que ce soit. –

+0

Vous devriez probablement passer à vos autres questions et choisir la bonne réponse, si elles en ont une. – Tiago

Répondre

5

L'ID de la balise select dans votre code HTML n'a pas besoin d'avoir des connaissances de vos dossiers de pathologie. Votre code est correct, sauf pour l'absence de balise select de fermeture.

Votre vue Django qui est mis en correspondance avec la/pathologie/URL d'action doit gérer la méthode POST et tirez l'identifiant de la pathologie de la demande comme ceci:

pathology_id = request.POST['pathology'] 

Maintenant, vous pouvez regarder cet objet dans votre base de données par son identifiant et générer une nouvelle page/formulaire ou toute autre logique métier que vous devez faire avec.

La clé de dictionnaire que vous devez utiliser dans l'appel request.POST ['...'] est basée sur le nom que vous avez donné à votre élément select, dans ce cas, pathology.

+0

pathology() prend exactement 2 arguments (1 donné) est l'erreur que je reçois, ce qui semble dire que la variable ne passe pas à travers. J'ai le pathology_id = request.POST ['pathology'] dans la vue. J'ai la fin, maintenant, aussi bien. Max –

+0

L'ID de pathologie sélectionné ne sera pas transmis à votre vue en tant qu'argument, mais plutôt en tant que données POST attachées à l'objet 'request'. La signature de la fonction pour votre vue devrait être quelque chose comme ceci: def pathologie (demande): ... –

+0

Merci! Je vous remercie!! Je vous remercie!!! J'ai enfin toutes les petites pièces qui travaillent ensemble. Oui, je réalise maintenant la pathologie def (demande) et non la pathologie def (demande, agent pathogène). Désolé, j'ai été un tel parasite avec ce problème, mais je panique pour obtenir quelque chose de opérationnel et je suis nouveau à Django. –

0

Le form handling library de Django est un excellent outil pour gérer vos formulaires HTML. Il extrait les options de la base de données, génère le code HTML pour la liste déroulante et enregistre la sélection dans la base de données pour vous avec un minimum de code.

Questions connexes