Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/12/2014, 07:37
Avatar de kojicomics
kojicomics
 
Fecha de Ingreso: junio-2013
Mensajes: 49
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Campos opcionales con UserChangeForm

Al final he conseguido solucionar el problema de los valores en blanco. Compruebo el tamaño del valor, de forma que si es igual a 0, utiliza el valor anterior

forms.py

Código Python:
Ver original
  1. class UserEditForm(UserChangeForm):
  2.  
  3.     class Meta:
  4.         model = Profiles
  5.         fields = ('username', 'first_name', 'last_name', 'email', 'url',
  6.                   'avatar',)
  7.         exclude = ('password',)
  8.  
  9.     def __init__(self, user, *args, **kwargs):
  10.         super(UserEditForm, self).__init__(*args, **kwargs)
  11.         self.user = user
  12.  
  13.     def clean(self):
  14.         cleaned_data = self.cleaned_data
  15.         for field, value in list(cleaned_data.items()):
  16.             old_value = getattr(self.user, field)
  17.             if len(value) > 0:
  18.                 cleaned_data[field] = value
  19.             else:
  20.                 cleaned_data[field] = old_value
  21.  
  22.         return cleaned_data
  23.  
  24.     def clean_password(self):
  25.         return ""

views.py

Código Python:
Ver original
  1. class UserEdit(UpdateView):
  2.     model = Profiles
  3.     form_class = UserEditForm
  4.     success_url = reverse_lazy('profile')
  5.     template_name = 'profile/edit.html'
  6.  
  7.     def get_form_kwargs(self):
  8.         kwargs = super(UserEdit, self).get_form_kwargs()
  9.         kwargs['user'] = self.request.user
  10.         return kwargs
  11.  
  12.     def get_object(self, queryset=None):
  13.         return self.request.user