如何在Django管理中只显示当前用户所在公司对应的数据

How to show in the Django administration only the data corresponding to the current user's company

我正在用 Django 开发一个项目。我有好几家注册公司,所有的模型都是以公司为准。我的问题是:用户进入管理只能看到自己公司的数据,怎么办

models.py

class Company(models.Model):
    name = models.CharField(max_length=100)
    country = models.CharField(max_length=100)

class XUser(User):
    phone = models.CharField(max_length=20, null=True, blank=True)
    card = models.CharField(max_length=20, null=False, blank=True)
    company = models.ForeignKey(Company, on_delete=models.CASCADE, blank=True, null=True)

    def __str__(self):
        return self.nombre

class Book(models.Model):
    user = models.ForeignKey(XUser, on_delete=models.CASCADE)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    name = models.CharField(max_length=30)

例如,当用户进入管理时,他们只能看到属于他们公司的书籍。

提前致谢。

您可以通过覆盖默认查询集来创建管理混入来执行此操作。

class CompanyModelMixin:
    def get_queryset(self, request):
        qs = super().get_queryset(request)

        # return a filtered queryset
        return qs.filter(company=request.user.company)

然后您可以在任何 ModelAdmin 中使用它。

@admin.register(Book)
class BookAdmin(admin.ModelAdmin, CompanyModelMixin):
    pass