2009-10-26 3 views
2

У меня есть форма с этими входами:Джанго и HTML массивы

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

, когда я представляю, как я могу назначить этот HTML массив в переменном, вызвать request.POST.getlist («человек») Безразлично» т работа, я проверял на другой пост, но только один я нашел не имею ничего полезного

THEAD

Я надеюсь, что кто-то может помочь мне понять это, вызвать прочитать документ, и не совсем понял способ сделать это ...


дело в том, что у меня есть таблица в моей дб со скидками ... где каждая скидка имеет значение по умолчанию ... так что я сделал это

discounts = Discount.objects.all() 

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

и на моем я не имею никакого способа поймать этот массив html, который я отправляю ... любые предложения?

+0

Coming форма PHP это достаточно интуитивный способ работать на формах и массивы. На самом деле не вижу недостатка в этом авто-синтаксическом анализе. Можно легко увидеть django, позволяющий request.POST.get ('person', {}). Get ('surname', '') – Mikhail

+0

Для нескольких входов с одинаковым именем вы можете использовать request.POST.getlist (...) – Mikhail

ответ

1

Это не похоже на очень путинский способ сделать это. или даже способ django-nic сделать это.

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

Я действительно не сделал много форм вещей с Джанго еще, но это выглядит, как это было бы полезно с точкой зрения автоматической генерации, проверки и т.д.

1

Если вы определяете формируется таким образом в шаблонах, вы не можете напрямую сопоставить его со словарем.

Вы должны получить индивидуальные значения только

request.POST['person[name]'] 

Однако, это не способ использования форм в Джанго. Вы должны скорее определить эти поля в соответствии с Джанго образуют декларативный синтаксис (docs), и пусть Джанго обрабатывать рендеринга в шаблонах с помощью тега, как:

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

Таким образом, вы можете определить save метод в виде класса к выполните вашу функцию отображения массива. Если вы хотите сопоставить его с определенной моделью, это будет запасаться, и ваша форма должна продлить ModelForm, чтобы воспользоваться этим преимуществом.

+0

дело в том, что у меня есть таблица в моем db со скидками ... где у каждой скидки есть значение по умолчанию ... так я сделал это {% для I в скидках%} <ввести имя = "скидка [{{i.id}}]" значение = "{{i.default_value}}"> и на мой взгляд, У меня нет способа поймать этот массив html, который я отправляю ... любые предложения? –

+0

Вы должны создать форму модели или форму и передать соответствующий ему исходный словарь. документы, упомянутые выше, могут помочь. Если вам нужна помощь в чем-то конкретном, задайте отдельный вопрос или обновите этот. –

4

Извините за ответ на такой старый вопрос, но я столкнулся с той же проблемой и не нашел приемлемых ответов на него. Итак, вот мое решение:

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 

Теперь вы можете использовать его как это:

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

или

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

Вы уверены, что Django не реализовала такую ​​полезную вещь? – Mahdi

Смежные вопросы