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 admin.site.unregister(Group) class UserAddForm(forms.ModelForm): 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): 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): user = super().save(commit=False) user.set_password(self.cleaned_data['password']) if commit: user.save() return user class UserChangeForm(forms.ModelForm): password = ReadOnlyPasswordHashField() class Meta: model = User fields = ('username', 'email', 'password', 'is_admin') def clean_password(self): return self.initial['password'] @admin.register(User) class UserAdmin(admin.ModelAdmin): 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): if not obj: return self.add_fieldsets return super().get_fieldsets(request, obj) def get_form(self, request, obj=None, **kwargs): defaults = {} if obj is None: defaults['form'] = self.add_form defaults.update(kwargs) return super().get_form(request, obj, **defaults) @admin.register(SocialNetworks) class SocialNetworksAdmin(admin.ModelAdmin): list_display = ('user', 'twitter', 'facebook', 'instagram', 'youtube', 'twitch') raw_id_fields = ('user',) search_fields = ('user__username',) ordering = ('user',)