from django.contrib import admin from django.contrib.auth import get_user_model from django.contrib.auth.models import Group as GroupBase from django.contrib.auth.admin import UserAdmin as BaseUserAdmin, GroupAdmin from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ from import_export import resources from jet.filters import RelatedFieldAjaxListFilter, DateRangeFilter from rangefilter.filter import DateTimeRangeFilter from core.admin import SafeModelAdmin from referral.admin import ReferralAdminInline from .forms import UserChangeForm, UserCreationForm from .models import Profile, Company, Group class CustomUserResource(resources.ModelResource): class Meta: model = get_user_model() fields = ('id', 'username', 'email', 'status',) export_order = ( 'id', 'username', 'email', 'status' ) @admin.register(get_user_model()) class UserAdmin(SafeModelAdmin, BaseUserAdmin): inlines = ( ReferralAdminInline, ) fieldsets = ( (None, {'fields': ('email', 'username', 'password', 'referral_user')}), (_('Permissions'), {'fields': ('status', 'is_superuser', 'groups', 'user_permissions')}), (_('Important dates'), {'fields': ('last_login', 'confirmed_at')}), ) add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ( 'username', 'email', 'password1', 'password2', 'referral_user', 'status', 'is_superuser' ), }), ) list_display = ('email', 'username', 'status') list_filter = ( 'status', 'is_superuser', 'groups', ('confirmed_at', DateRangeFilter), ('create_at', DateRangeFilter), ('updated_at', DateTimeRangeFilter), ) search_fields = ('username', 'first_name', 'last_name', 'email') ordering = ('username',) list_editable = ('status',) filter_horizontal = () form = UserChangeForm add_form = UserCreationForm resource_class = CustomUserResource def get_inline_instances(self, request, obj=None): add_path = reverse_lazy( 'admin:{}_{}_add'.format( self.model._meta.app_label, self.model._meta.object_name.lower() ) ) if request.path == add_path: self.inlines = () else: self.inlines = ( ReferralAdminInline, ) return super().get_inline_instances(request, obj) def get_field_queryset(self, db, db_field, request): queryset = super().get_field_queryset(db, db_field, request) if db_field.name == "referral_code": queryset = queryset.exclude(referral_owner__id=request.resolver_match.kwargs.get('object_id', None)) return queryset @admin.register(Profile) class ProfileAdmin(admin.ModelAdmin): search_fields = ('first_name', 'last_name', 'phone') list_display = ('user', 'first_name', 'last_name', 'phone') list_filter = ( ('birthday', DateRangeFilter), ) readonly_fields = ('first_name', 'last_name', 'phone',) exclude = ('status',) def has_delete_permission(self, request, obj=None): return False def has_add_permission(self, request): return False @admin.register(Company) class CompanyAdmin(admin.ModelAdmin): search_fields = ('company_name', 'inn', 'ogrn'), list_display = ('user', 'company_name', 'type') list_filter = ('type',) readonly_fields = ('company_name', 'inn', 'ogrn', 'type') def has_delete_permission(self, request, obj=None): return False def has_add_permission(self, request): return False admin.site.unregister(GroupBase) @admin.register(Group) class GroupAdmin(GroupAdmin): pass