Django Проблема с подсчетом объектов модели

Мне нужно отключить добавление новых пользователей в панели администратора, как только количество пользователей превысит определенное значение. Приведенный ниже код работает для удаления кнопки "добавить пользователя", когда я тестирую его с жестко закодированными целыми числами. Однако эта строка, похоже, не возвращает количество пользователей без жесткого кодирования: usercount = CustomUser.objects.count()

Есть идеи, как получить количество уже добавленных пользователей?

Модель:

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import Group
from django.contrib import admin
from django.db.models import Count
from django.db.models.signals import post_save


class CustomUser(AbstractUser):
    full_name = models.CharField(max_length=250, null=True)
    age = models.PositiveIntegerField(null=True, blank=True)
    employee_type = models.ForeignKey(Group, null=True, on_delete=models.SET_NULL, default=1)
    is_active = models.BooleanField(null=False, default=True)

# disable add new user in the admin panel
class RemoveAddNew(admin.ModelAdmin):
    usercount = CustomUser.objects.count()

    if usercount > 5:
      def has_add_permission(self, request, obj=None):
          return False

Администратор.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser, RemoveAddNew

class CustomUserAdmin(RemoveAddNew, UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['username', 'email', 'full_name', 'age', 'is_staff', 'is_active']
    fieldsets = UserAdmin.fieldsets + (
        (None, {'fields': ('full_name', 'age', )}),
    )
    add_fieldsets = UserAdmin.add_fieldsets + (
        (None, {'fields': ('email','full_name', 'age', 'employee_type', 'is_active')}),
    )

admin.site.register(CustomUser,CustomUserAdmin)

Я думаю, что вы переборщили с кодом. Мое решение проще и короче:

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['username', 'email', 'full_name', 'age', 'is_staff', 'is_active']
    fieldsets = UserAdmin.fieldsets + (
        (None, {'fields': ('full_name', 'age', )}),
    )
    add_fieldsets = UserAdmin.add_fieldsets + (
        (None, {'fields': ('email','full_name', 'age', 'employee_type', 'is_active')}),
    )

    def has_add_permission(self, request):

        return CustomUser.objects.count() < 6

admin.site.register(CustomUser,CustomUserAdmin)
Вернуться на верх