Thursday, February 27, 2014

How to detect clear checkbox chequed on ClearableFileInput

Hello,

I have a edit view to modify an object. The model includes an inline formset of insumoRecurso objects, for including files associated with the main object. These files appear with a checkbox for clearing files (ClearableFileInput widget). What should I test on my view to detect that the checkbox has been selected?

Here's the code of my view:

@login_required
def editarRecurso(request, recurso_id):
  recurso = get_object_or_404(Recurso, pk=recurso_id)
  objetos = {}
  objetos["recurso"] = recurso
  u = request.user
  if recurso.creador != u and not (usuarioEsSupervisor(u) or usuarioEsCoordinador(u)):
      objetos["mensaje_de_error"] = "Usted no puede editar este recurso."
  else:
    InsumoFormset = inlineformset_factory(Recurso, InsumoRecurso, extra=1)
    if request.method == 'POST':
      recursoForm = RecursoForm(request.POST, instance=recurso)
      insumoFormset = InsumoFormset(request.POST, request.FILES, instance = recurso)
      if recursoForm.is_valid():
        recurso = recursoForm.save(commit=False)
        recurso.save()
        notificarCreacionRecurso(
request, recurso)
        for insumoForm in insumoFormset:
          if insumoForm.is_valid():
            insumoRecurso = insumoForm.save(commit=False)
            if not insumoRecurso.archivo.name: #This is the way I found for not saving objects that doesn't have an uploaded file (i.e., when user doesn't choose a file to upload)!!! is there a better way?
              continue
            ir = insumoRecurso.save()
            if insumoRecurso.archivo.remove: #This is not working, "remove" attribute doesn't exist... but here is where I expect a way of detecting clear checkbox selection. If there is no file, then the whole insumoRecurso object must be deleted.
              ir.delete()
        return redirect(reverse('recursos:detalle', args=(recurso.id,)))
      else:
        objetos["recursoForm"] = recursoForm
        objetos["insumoFormset"] = insumoFormset
    else:
      objetos["recursoForm"] = RecursoForm(instance=recurso)
      objetos["recursoForm"].fields["curso"].queryset = Curso.objects.filter(owner=request.user)
      objetos["insumoFormset"] = InsumoFormset(instance=recurso)

  template = loader.get_template('recursos/editarRecurso.html')
  context = RequestContext(request, objetos)
  return HttpResponse(template.render(context))


I would appreciate any help, By the way, even though I check the clear checkbox, the file is never deleted (I would assume that would happen on insumoRecurso.save(), but the files always remain there)

Thanks,
Hector.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/2bbe12a5-c070-4b10-85d4-406c9053a8c3%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment