2012-02-11 4 views
0

Je suis assez nouveau à django, et j'ai construit une petite page en utilisant des formes. Quand je vais au modèle et utiliser les balises de modèle, tels que:queryset django et modèles

{{form.q}} 

everthing est très bien, et je vois le champ de saisie de formulaire. Cependant, je n'aime pas vraiment la "boîte" d'entrée qu'elle fournit et je souhaite remplacer cette fonctionnalité.

Ainsi, dans mon HTML, j'aurais quelque chose comme:

<input id="customfield" name="q" type="text"/> 

J'ai essayé ce qui précède, et tout semble fonctionner correctement. Cependant, si j'utilise par exemple:

<input id="customfield" name="{{form.q}}" type="text"/> 

il dosent le travail. Donc, ma question est:

[1] Est-ce correct d'utiliser name = "q" ou comment peut-on spécifier {{form.q}} si j'ai une entrée personnalisée? [2] Y a-t-il des inconvénients (comme l'injection sql) lors de l'utilisation de name = "q" par opposition à simplement {{form.q}}?

Désolé pour les 101 questions!

+0

Qu'est-ce que la forme, et quel type de champ est q? – Nix

+0

It (q) est un champ de recherche d'entrée. – AJW

+0

Je voulais dire CharField. – AJW

Répondre

0

C'est exactement comme cela que vous construiriez un formulaire si vous vouliez autant de contrôles dans le modèle.

Vous prendriez ce cours lorsque d'autres raccourcis django ont échoué, comme l'un des widgets qui détermine la façon dont votre champ est rendu.

Mise à jour: après avoir lu votre commentaire, si vous voulez juste injecter des attributs à l'élément input, vous pouvez passer le widget un dictionnaire contenant attribute:value paires.

q = forms.CharField(widget=forms.TextInput(attrs={'class': 'foobar'})) 

injection SQL est hors de propos ici (vous devriez vous soucier quand un utilisateur a quelque chose à voir avec SQL écrit sur votre serveur) et il n'y a pas d'inconvénient, à part le code étant plus difficile à écrire et à maintenir .

+0

Merci beaucoup pour votre commentaire Yuji. Vouliez-vous dire que c'est OK et sûr de faire: ? – AJW

+0

@JamesW, bien sûr! Que pensez-vous que {{form.q}} rend finalement comme? :) Il n'y a pas de différence pour un navigateur si Django le génère automatiquement, ou vous l'écrivez à partir de zéro. –

+0

Merci encore Yuji. En fait, j'ai préféré utiliser name = "q" car cela me donne plus de contrôle pour inclure js et d'autres widgets non-django. – AJW