Создать Python словарь списков - PullRequest
1 голос
/ 18 октября 2011

Я новичок в python и django, и мне было интересно, как бы я мог составить список списков.

Мои 4 списка:

ap = request.POST.getlist('amount_paid[]')
pd = request.POST.getlist('paid_date[]')
method = request.POST.getlist('method[]')
comments = request.POST.getlist('comments[]')

Как бы я сделал это всловарь, который я мог бы затем зациклить в шаблоне django, таком как;

{% for i in the_dict %}
{{i.amount_paid}}
{% endfor %}

Заранее спасибо!

Обновление:

хмм.,В php я могу сделать следующее для массива полей:

for($i=0;$i<count($_POST['amount_paid']);$i++) {
echo $_POST['amount_paid'][$i];
echo $_POST['paid_date'][$i];
}

Все поля формы являются текстовыми полями ввода. Как бы я сделал это в Django?

Ответы [ 3 ]

1 голос
/ 18 октября 2011

Синтаксис Python dict очень прост. Это просто пары ключ-значение внутри пары фигурных скобок, например:

the_dict = {
    'amount_paid': request.POST.getlist('amount_paid[]'),
    'paid_date': request.POST.getlist('paid_date[]'),
    'method': request.POST.getlist('method[]'),
    'comments': request.POST.getlist('comments[]'),
}

После вашего обновления похоже, что вы вообще не хотите dict, но zip():

post = request.POST
lists = zip(post.getlist('amount_paid[]'), 
        post.getlist('paid_date[]'),
        post.getlist('method[]'),
        post.getlist('comments[]'),
        )
for amount_paid, paid_date, method, comments in lists:
    print amount_paid
    print paid_date
    # et cetera...
1 голос
/ 18 октября 2011

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

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

Что ж, это не правильный способ сделать это в Django.Вы должны использовать formsets , которые дают вам одну форму для каждой строки в таблице, т. Е. Именно то, что вы хотите достичь.

1 голос
/ 18 октября 2011

Вы можете создать:

the_dict = dict(amount_paid=ap, paid_date=pd, method=method, comments=comments)

Также ваш код шаблона не имеет смысла. Вы перебираете ключи dict и не используете их в теле.

EDIT

{% for key in the_dict %}
    {% for val in the_dict[key] %}
        <input name="{{key}}" value="{{val}}"/>
    {% endfor %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...