2011-05-05 17 views
5

Im tratando de guardar un formulario usando UpdateView en Django 1.3 y parecía haber tenido un problema. Cuando guardo el formulario, este se envía a la URL actual y la URL de éxito es la misma URL.Vista basada en clase que extiende UpdateView no guarda el formulario correctamente

Al guardar el formulario, los datos parecen estar cambiados porque todos los campos de la página se actualizan, pero cuando actualizo, todo parece revertirse.

La forma es una forma del modelo y de aquí es mi punto de vista:

class UserProfileView(UpdateView): 
    context_object_name = 'profile' 

    def get_template_names(self): 
     return ['webapp/user_profile.html'] 

    def get_queryset(self): 
     pk = self.kwargs.get('pk', None) 

     if pk is not None: 
      user = User.objects.get(pk=pk) 
     else: 
      raise AttributeError(u"Could not locate user with pk %s" 
          % pk) 

     if user.contributor_profile.all(): 
      queryset = Contributor.objects.filter(user__pk=pk) 
     else: 
      queryset = Member.objects.filter(user__pk=pk) 

     return queryset 

    def get_object(self, queryset=None): 
     if queryset is None: 
      queryset = self.get_queryset() 

     return queryset.get() 

no veo lo que podría ir mal, ya que Django guarda el formulario a través de la clase y de la UpdateView Mixin se extiende. ¿Alguien que haya tenido el mismo problema?

Respuesta

9

Resolvimos la solución. El problema estaba sucediendo porque había un error en el formulario que no se informaba. Esto parece ocurrir con los campos ocultos que deben establecerse de alguna manera para que el formulario sea válido.

La solución es bastante simple. Solo debe sobrescribir la función de publicación y la cuenta para cualquier campo oculto:

def post(self, request, *args, **kwargs): 
    pk = self.kwargs.get('pk', None) 

    if pk is not None: 
     user = User.objects.get(pk=pk) 
    else: 
     raise AttributeError(u"Could not locate user with pk %s" 
          % pk) 

    if user.contributor_profile.all(): 
     contributor = Contributor.objects.get(user=user) 
     form = ContributorForm(request.POST, instance=contributor) 
    else: 
     member = Member.objects.get(user=user) 
     form = MemberForm(request.POST, instance=member) 

    if form.is_valid(): 
     self.object = form.save() 
     return HttpResponseRedirect(self.get_success_url()) 
    else: 
     return self.render_to_response(self.get_context_data(form=form)) 
Cuestiones relacionadas