He estado usando este sitio como un ejemplo de cómo hacer una forma dinámica en Django . En su opinión, él usa

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

Para pasar los datos al formulario y al constructor de formularios que usa

extra = kwargs.pop('extra')

Para acceder a los datos POST. Traté de hacer algo similar con mi punto de vista:

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

En mi constructor de formularios imprimí args y kwargs y descubrí que kwargs está vacío y args es una tupla que contiene el QueryDict que a su vez contiene los datos POST . Si intento utilizar form=CustomQueryConstraintForm(**request.POST), cada elemento en kwargs es una lista que contiene el valor del campo como su único elemento. ¿Estoy haciendo algo mal aquí? Si no, ¿hay una manera más elegante de acceder a los datos que args[0][element_name][0]?

9
murgatroid99 29 jun. 2011 a las 19:28

3 respuestas

La mejor respuesta

Ese es el comportamiento esperado para los formularios: los datos POST que pasa al formulario son el primer argumento, args [0] y no un argumento de palabra clave. ¿Qué estás buscando?

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

y en el constructor de formularios usa extra = kwargs.pop ('extra') para acceder a los datos POST.

kwargs.pop('extra') no recibe datos POST. Es una lista de preguntas asociadas con ese usuario dado, un escenario dado por el autor que el "departamento de marketing" le entregó.

En cualquier caso, si necesita acceder a los datos de la publicación en cualquier punto de un formulario, encuentro self.data el más limpio que se establece en forms.__init__.

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.data['my_field']
8
Yuji 'Tomita' Tomita 29 jun. 2011 a las 16:38

También puede acceder a los datos del formulario a través del diccionario cleaned_data después de usar el método is_valid(). Me gusta esto:

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

Es un diccionario de los valores que se han introducido en el formulario.

0
Carter Fawson 4 dic. 2015 a las 16:35

Si entiendo correctamente, después de una solicitud POST, está intentando volver a mostrar la misma página de formulario en la que se rellenan los campos del formulario, ¿verdad? En caso afirmativo, esto es lo que necesita:

form = CustomQueryConstraintForm(initial=request.POST)
0
Régis B. 20 jun. 2013 a las 10:57