2009-10-26 4 views
2

J'ai une forme avec ces entrées:tableaux Django et HTML

<input name="person[name]" value=""> 
<input name="person[surname]" value=""> 
<input name="person[age]" value=""> 

quand je soumets, comment puis-je attribuer ce tableau html à une variable, la cause request.POST.getlist (« personne ») n » travail t, i été vérifier d'autres post, mais le seul que je trouve n'a rien USEFULL

THEAD

J'espère que quelqu'un pourrait me aider à comprendre, faire une lecture de la doc, et ne fait obtenir la façon de le faire ...


la chose est que j'ai une table dans ma db avec des rabais ... où chaque rabais a une valeur par défaut ... donc je l'ai fait

discounts = Discount.objects.all() 

{% for i in discounts %} 
<input name="discount[{{ i.id }}]" value="{{ i.default_value }}"> 
{% endfor %} 

et sur mon je n'ai pas une méthode pour attraper ce tableau html je vous envoie ... des suggestions?

+0

Viennent forme PHP c'est une façon assez intuitive d'opérer sur les formes et tableaux. Ne voyez pas vraiment un inconvénient de ce genre d'analyse automatique. Pourrait facilement voir django permettant request.POST.get ('person', {}). Get ('patronyme', '') – Mikhail

+0

Pour plusieurs entrées avec le même nom, vous pouvez utiliser request.POST.getlist (...) – Mikhail

Répondre

1

Cela ne semble pas être une façon très pythonique de le faire. ou même une façon django-nic de le faire.

http://docs.djangoproject.com/en/dev/topics/forms/

Je n'ai pas vraiment fait encore beaucoup de choses avec des formes django, mais cela semble que ce serait utile en termes de génération automatique, validation, etc.

1

Si vous définissez votre se forme de cette façon dans les modèles, vous ne pouvez pas le mapper directement à un dictionnaire.

Vous devriez obtenir des valeurs individuelles ne

request.POST['person[name]'] 

Cependant, cela est impossible d'utiliser des formes dans django. Vous devez plutôt définir ces champs comme par django forment la syntaxe déclarative (docs), et laisser gérer django le rendu dans les modèles utilisant une balise comme:

{{form.as_p}} 
{{form.as_table}} 

De cette façon, vous pouvez définir la méthode save sur la classe de formulaire effectuez votre fonction "cartographie de tableau". Si vous voulez le mapper à un modèle défini, celui-ci est stocké, et votre formulaire devrait s'étendre ModelForm, pour prendre cet avantage.

+0

la chose est que j'ai une table dans mon db avec des réductions ... où chaque réduction a une valeur par défaut ... donc je l'ai fait {% for i in rabais%} et moi Je n'ai aucune méthode pour attraper ce tableau html que j'envoie ... des suggestions? –

+0

Vous devez créer un modelform, ou un formulaire et lui passer le dictionnaire initial, selon le cas. les documents mentionnés ci-dessus peuvent aider. Si vous avez besoin d'aide pour quelque chose de spécifique, posez une question distincte ou mettez à jour celle-ci. –

4

Désolé de répondre à une question aussi ancienne, mais je suis resté avec le même problème et je n'ai trouvé aucune réponse acceptable. Alors, voici ma solution:

def get_post_dict(post, key): 
    result = {} 
    if post: 
     import re 
     patt = re.compile('^([a-zA-Z_]\w+)\[([a-zA-Z_\-][\w\-]*)\]$') 
     for post_name, value in post.items(): 
      value = post[post_name] 
      match = patt.match(post_name) 
      if not match or not value: 
       continue 
      name = match.group(1) 
      if name == key: 
       k = match.group(2) 
       result.update({k:value}) 
    return result 

Maintenant, vous pouvez l'utiliser comme ceci:

persons = get_post_dict(request.POST, 'person') 
... 

ou

django.http.QueryDict.getdict = get_post_dict 
persons = request.POST.getdict('person') 
+0

Etes-vous sûr que Django n'a pas implémenté une chose aussi utile? – Mahdi