Доступ к данным POST в форме Django - PullRequest
9 голосов
/ 29 июня 2011

Я использовал этот сайт в качестве примера того, как создать динамическую форму в Django. По его мнению, он использует

if request.method == 'POST':
    form = UserCreationForm(request.POST)

для передачи данных в форму и в конструктор формы он использует

extra = kwargs.pop('extra')

для доступа к данным POST. Я пытался сделать что-то похожее с моим видом:

def custom_report(request):
    if request.method=='POST':
        form=CustomQueryConstraintForm(request.POST)
    else:
        form=CustomQueryConstraintForm()
    return render(request, 'frontend/custom_report.html', {'form':form})

В конструкторе формы я напечатал args и kwargs и обнаружил, что kwargs пуст, а args - это кортеж, содержащий QueryDict, который, в свою очередь, содержит данные POST. Если вместо этого я попытаюсь использовать form=CustomQueryConstraintForm(**request.POST), каждый элемент в kwargs будет списком, содержащим значение поля в качестве единственного элемента. Я что-то здесь не так делаю? Если нет, есть ли более элегантный способ доступа к данным, чем args[0][element_name][0]?

Ответы [ 3 ]

8 голосов
/ 29 июня 2011

Это ожидаемое поведение для форм: данные POST, которые вы передаете в форму, являются первым аргументом, args [0], а не аргументом ключевого слова. Что вы ищете?

data = args[0]
print data['my_field']

и в конструкторе форм он использует extra = kwargs.pop ('extra') для доступа данные POST.

kwargs.pop('extra') не получает данные POST. Это список вопросов, связанных с данным пользователем - сценарий, заданный автором, который вам передал «отдел маркетинга».

В любом случае, если вам нужен доступ к данным публикации в любой точке формы, я считаю self.data наиболее чистым, установленным в forms.__init__.

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.data['my_field']
0 голосов
/ 04 декабря 2015

Вы также можете получить доступ к данным формы через словарь cleaned_data после использования метода is_valid(). Как это:

jobForm = JobForm(request.POST)
jobForm.is_valid()
jobForm.cleaned_data

это словарь значений, введенных в форму.

0 голосов
/ 20 июня 2013

Если я правильно понимаю, после запроса POST вы пытаетесь повторно отобразить ту же страницу формы, в которой заполнены поля формы, верно?Если да, то это то, что вам нужно:

form = CustomQueryConstraintForm(initial=request.POST)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...