如何在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
我正在用 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