//barrabarra

JAVIER ROMERO
Programación web y escritorio
 

Our blog, keeping you up-to-date on our latest news.

 

Django: acceder al value de los campos de un formulario

marzo 27, 2010 at 8:47 pm | Blog, Programación | No comment

 

Recientemente he tenido que preparar una plantilla en django que mostrara una serie de imágenes del usuario y un formulario adyacente en el que podían sustituir esta, así que me encontraba con el problema de mostrar al usuario sus fotos actuales, si es que tenían.

Para ello se crea un formulario heredando del modelo:


forms.py:
class PhotosForm(forms.ModelForm):
   photo = forms.ImageField(label=_(u'Fotografía'), required=False)
   current = forms.CharField(label='', widget=forms.HiddenInput(), required=False)

   class Meta:
      model = ProfilePhotos
      exclude = ('profile','accepted',)

Luego, en la vista, puedes consultar el perfil del usuario en cuestión y ver si tiene fotografías:


views.py
@login_required
def edit_photos(request, template_name='members/photos.html'):
   page_title = _(u'Editar fotografías')
   PhotosFormSet = formset_factory(PhotosForm, extra=5, max_num=5)
   profile = request.user.profiles_set.filter(accepted=True).latest('date')

   if request.method == 'POST':
       ...
   else:
      profile_photos = profile.profilephotos_set.filter(accepted=True)
      if profile_photos:
         data = []
         for photo in profile_photos:
            data.append({'current': photo.photo.name})
         formset = PhotosFormSet(initial = data)
      else:
         formset = PhotosFormSet()

Y finalmente, en la plantilla se puede acceder a los valores de los campos mediante


photos.html:
   {{ formset.management_form }}
   {% for photos_form in formset.forms %}
   

   {% if photos_form.initial.current %}
      [img src="{{photos_form.initial.current }}" alt="" /]
   {% else %}
      [img src="default.jpg" alt="" /]
   {% endif %}
   

   ...

Y del mismo modo, se puede acceder mediante form.initial.nombre_clave a cualquier otro dato inicial.

Si en lugar de proporcionar datos iniciales lo que hacemos es asociar el formulario a una instancia ( form.is_bound == True ) entonces podremos acceder a los datos mediante form.data.nombre_clave

Bah, como salta a la vista, el formateo de código de WordPress no es muy bueno…

 

Categorias:

Archivo: