0

我正在为多所大学创建一个 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

我为每个学院创建了一个员工用户,但申请人的更改列表也显示了不属于同一学院的申请人。我想修改管理页面更改列表,以便仅列出属于该特定机构的申请人。目前我的申请人页面更改列表对于我必须从中删除一些申请人的每个机构来说都是这样的。

当前更改列表

当前更改列表

4

2 回答 2

0

感谢@shahbaz ahmand,我只是在写评论中给出的答案。

使用 Django 3.2 覆盖 admin.py 中的 get_queryset():

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)

请注意,我假设机构和用户之间存在一对一的关系。

于 2021-09-07T06:38:37.220 回答
0

听起来您需要支持多租户。换句话说,一些“admin”类型的用户将“属于”一个机构,因此,当他们登录时,他们应该只能看到来自他们机构的申请人。

不幸的是,这可能是一个难以解决的问题。如果您使用 postgres 作为数据库,那么Django Tenant Schemas非常酷。但是,至少根据我的经验,我无法让用户看到所有对象(不确定您是否需要)。

如果这不符合您的需求,当然还有其他软件包试图以不同的方式解决问题,谷歌搜索应该会出现这些。

如果这些包都不适合您的需求,您可能会使用Django Sites 框架和自定义用户来推出自己的多租户。

于 2017-10-17T19:21:16.827 回答