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