"""Configura el panel de administracion para la aplicacion""" from django.contrib import admin from django.contrib.auth.forms import ReadOnlyPasswordHashField from django.contrib.auth.models import Group from django import forms from users.models import User, SocialNetworks # Remueve Group, el cual es definido por django pero mi modelo no lo tiene implementado ni # lo utiliza admin.site.unregister(Group) class UserAddForm(forms.ModelForm): """Formulario para agregar un usuario""" password = forms.CharField(label='Contraseña', widget=forms.PasswordInput) password_confirmation = forms.CharField(label='Confirmación de contraseña', widget=forms.PasswordInput) class Meta: model = User fields = ('username', 'email') def clean_password_confirmation(self): """Valida la contraseña con su confirmación Es llamado por la autenticación de django """ password = self.cleaned_data.get("password") password_confirmation = self.cleaned_data.get("password_confirmation") if password and password_confirmation and password != password_confirmation: raise forms.ValidationError('Las contraseñas no coinciden') return password_confirmation def save(self, commit=True): """Guarda un usuario""" user = super().save(commit=False) user.set_password(self.cleaned_data['password']) if commit: user.save() return user class UserChangeForm(forms.ModelForm): """Formulario para editar un usuario""" password = ReadOnlyPasswordHashField() class Meta: model = User fields = ('username', 'email', 'password', 'is_admin') def clean_password(self): """Retorna la contraseña inicial entregada al formulario Esto es debido a que no se puede modificar la contraseña en esta sección """ return self.initial['password'] @admin.register(User) class UserAdmin(admin.ModelAdmin): """Crea la defincion de Usuario para el panel de administracion Tiene un formulario de creacion y modificacion; """ form = UserChangeForm add_form = UserAddForm list_display = ('username', 'email', 'is_admin', 'is_active') list_filter = ('is_admin', 'is_active') fieldsets = ( (None, {'fields': ('username', 'email', 'password')}), ('Permisos', {'fields': ('is_admin',)}), ) add_fieldsets = ( (None, {'fields': ('username', 'email', 'password', 'password_confirmation')}), ) search_fields = ('username', 'email') ordering = ('username', 'email') def get_fieldsets(self, request, obj=None): """Sobrescribe esta función para retornar los fieldsets correspondientes a agregar un nuevo usuario""" if not obj: return self.add_fieldsets return super().get_fieldsets(request, obj) def get_form(self, request, obj=None, change=False, **kwargs): """Sobrescribe esta función para retornar el formulario correspondiente a agregar un nuevo usuario""" defaults = {} if obj is None: defaults['form'] = self.add_form defaults.update(kwargs) return super().get_form(request, obj, change, **defaults) @admin.register(SocialNetworks) class SocialNetworksAdmin(admin.ModelAdmin): """Administrador para las redes sociales de un usuario""" list_display = ('user', 'twitter', 'facebook', 'instagram', 'youtube', 'twitch') raw_id_fields = ('user',) search_fields = ('user__username',) ordering = ('user',)