2010-07-10 16 views
6

tengo una clase models.py como a continuaciónforma de gestión de errores durante el uso de modelformsets ('datos ManagementForm falta o ha sido manipulado')

class Educational_Qualification(models.Model): 
    user = models.ForeignKey(User) 
    exam = models.CharField(max_length=40) 
    pass_month = models.CharField(max_length=40) 

Tengo un views.py como a continuación

def create_qualification(request): 
QFormSet = modelformset_factory(Educational_Qualification, extra=3, exclude=("user",)) 
if request.method == "POST": 
    formset = QFormSet(request.POST, request.FILES) 

    if formset.is_valid(): 
    formset.save() 
    for form in formset.forms: 
    if form.is_valid(): 
    quali= form.save(commit=False) 
    quali.user = request.user 
    quali.save() 

    return HttpResponse("Saved") 
    else: 
    return HttpResponse("Snafu") 
else: 
    formset = QFormSet() 
return render_to_response("register/edu.html", {"formset":formset}, context_instance=RequestContext(request)) 

Cuando envío el formulario, arroja el error de validación. indicando que los datos de ManagementForm faltan o han sido manipulados con '

Tengo formset.management_form en mi plantilla.

¿Cuál podría ser el problema?

Respuesta

24

El error no está en sus vistas o los modelos, sino en las plantillas.

La forma correcta de hacer que el juego de formularios, es decir:

<form method="post" action=""> 
    <table> 
     {{ formset }} 
    </table> 
</form> 

o

<form method="post" action=""> 
    {{ formset.management_form }} 
    <table> 
     {% for form in formset.forms %} 
      {{ form }} 
     {% endfor %} 
    </table> 
</form> 

supongo, se recorre sobre las formas en las plantillas sin incluir la forma de gestión?

+0

Gracias, esto hizo arreglar mi problema! – vdboor

+0

¡increíble! gracias: D – DanH

0

También ocurre si hay varias vistas involucradas y una de ellas no tiene conocimiento del prefijo formset.

Obtener vista:

def someview(request): 
... 
    formset = Formset(prefix="foo") 
... 

Ver Mensaje (potencialmente una forma Ajax presentar manejador):

def ajaxview(request): 
... 
    formset = Formset(request.POST, prefix="foo") # here 
... 
Cuestiones relacionadas