Отображать только некоторые объекты в списке изменений модели в Django

Я создаю приложение Django для нескольких университетов. Вот классы моделей, которые я использовал.

class Institute(models.Model):
    name=models.CharField(max_length=200)
    def __str__(self):
        return self.name

class Applicant(models.Model):
    name = models.CharField(max_length=200)
    institute=models.ForeignKey(Institute,on_delete=models.CASCADE)
    def __str__(self):
         return self.name

Я создал штатного пользователя для каждого института, но список изменений кандидатов также показывает кандидатов, которые не принадлежат к одному и тому же институту. Я хочу изменить список изменений на странице администратора, чтобы в нем были перечислены только кандидаты, принадлежащие к этому конкретному институту. В настоящее время мой список изменений на странице соискателей выглядит следующим образом для каждого института, из которого я должен удалить некоторых соискателей.

Текущий список изменений

Текущий список изменений

2 ответа

Похоже, вам нужно поддерживать многопользовательский режим. Другими словами, некоторые пользователи типа "администратор" будут "принадлежать" институту, и поэтому при входе в систему они должны видеть только кандидатов из своего института.

К сожалению, это может быть довольно сложной проблемой. Если вы используете postgres в качестве базы данных, Django Tenant Schemas - это круто. Однако, по крайней мере, по моему опыту, я не смог найти пользователя, который мог видеть ВСЕ объекты (не уверен, нужно ли вам это или нет).

Если это не соответствует вашим потребностям, конечно, есть другие пакеты, которые пытаются решить проблему по-разному, поиск Google должен поднять их.

Если ни один из этих пакетов не удовлетворяет вашим потребностям, вы можете реализовать свою собственную многопользовательскую среду с помощью инфраструктуры сайтов Django и пользовательских пользователей.

Благодаря @shahbaz ahmand я просто пишу ответ, данный в комментарии.

В Django 3.2 переопределите get_queryset () в admin.py:

      from django.contrib import admin

class ApplicantAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(institute=request.user.institute)
admin.register(Applicant, ApplicantAdmin)

Обратите внимание, что я предполагаю отношения « один к одному» между Институтом и Пользователем.

Другие вопросы по тегам