Files
musiclist-server/users/admin.py
2020-06-07 20:52:22 -04:00

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',)