115 lines
3.6 KiB
Python
115 lines
3.6 KiB
Python
"""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',)
|