2010-11-29 7 views
5

Estoy tratando de realizar una validación de modo que no pueda eliminar a un usuario si es un administrador. Por lo tanto, me gustaría verificar y generar un error si hay un usuario que es administrador y se ha marcado para eliminarlo.Validar eliminación en formularios en línea de django-admin

Esta es mi línea ModelForm

class UserGroupsForm(forms.ModelForm): 
    class Meta: 
     model = UserGroups 

    def clean(self): 
     delete_checked = self.fields['DELETE'].widget.value_from_datadict(
      self.data, self.files, self.add_prefix('DELETE')) 
     if bool(delete_checked): 
      #if user is admin of group x 
      raise forms.ValidationError('You cannot delete a user that is the group administrator') 

     return self.cleaned_data 

La condición if bool(delete_checked): devuelve verdadero y cosas por el interior del bloque es ejecutado if pero por alguna razón este error de validación no se eleva. ¿Podría alguien explicarme por qué?

Mejor aún si hay otra forma mejor de hacer esto, por favor hágamelo saber

Respuesta

6

La solución que encontré fue a clean en el InlineFormSet en lugar de la ModelForm

class UserGroupsInlineFormset(forms.models.BaseInlineFormSet): 

    def clean(self): 
     delete_checked = False 

     for form in self.forms: 
      try: 
       if form.cleaned_data: 
        if form.cleaned_data['DELETE']: 
         delete_checked = True 

      except AttributeError: 
       pass 

     if delete_checked: 
      raise forms.ValidationError(u'You cannot delete a user that is the group administrator') 
Cuestiones relacionadas