Итак, я создаю систему управления школой в Django Admin. В этой школе есть несколько учреждений, и мы хотим создать администраторов, которые могут манипулировать только данными учеников, учителей и т. Д. c. этого определенного института. Например: если пользователь с правами администратора института AB C, он / она должен иметь возможность редактировать только данные студентов AB C, преподавателей и т. Д. c.
Вот моя пользовательская модель пользователя и института:
class Institute(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class User(AbstractUser):
"""
Our own User model. Made by overriding Django's own AbstractUser model.
We need to define this as the main user model in settings.py with
variable AUTH_USER_MODEL *IMPORTANT*
"""
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(
max_length=255,
unique=True,
verbose_name="email address"
)
institute = models.ForeignKey(
Institute, on_delete=models.SET_NULL, null=True)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
Каждый институт имеет принципала домена:
class DomainPrincipal(User):
is_admin = True
def __str__(self):
return self.first_name+" "+self.last_name
# Control model features
class Meta:
verbose_name = 'Domain Principal'
verbose_name_plural = 'Domain Principals'
Я создал следующего пользовательского администратора, чтобы показать только домен Принципалы, принадлежащие институту, к которому принадлежит текущий пользователь-администратор:
@admin.register(UserPrincipal)
class DomainPrincipalAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'institute')
def queryset(self, request):
qs = super(DomainPrincipalAdmin, self).queryset(request)
return qs.filter(
institute=request.user.institute
)
Но это не работает. Это все еще показывает мне полный список.