list_display 行中的 table 有条件地 django

list_display rows in a table conditionally django

我有两张桌子

Employee
-----
username
organisation_id
email

Organisation
------------
organisation_id
company_name

User_A->organisation_1
User_B->organisation_1
User_C->organisation_2
User_D->organisation_2

当 user_A 登录时,他应该只能看到 User_A 和 User_B 这段代码应该如下所示, 逻辑是首先我们需要找到当前用户组织并有条件地在管理页面中显示结果 Django 管理员代码

admin.site.register(Employee, CustomUserAdmin)
admin.site.register(Organization)
class CustomUserAdmin(UserAdmin):
def filter_view(request):
current_user = request.user
organization_id =employees.objects.get(id=current_user.id).organization_id
List_display = ('username', 'email','Organizations.objects.filter(id=organization_id)')

你可以写list_display是...

list_display = ('username', 'email', 'filtered_organisation')

并为 filtered_organisation 编写如下方法...

def filtered_organisation(self, obj):
    return Organizations.objects.filter(id=organization_id)

更多参考click here

您可以覆盖 get_queryset(request) 方法:

我假设您在员工和用户之间存在一对一关系

class Employee(models.Model):
   user = models.OneToOneField(User)

然后像这样覆盖 ModelAdmin class:

class CustomUserAdmin(UserAdmin):
     def get_queryset(self, request):
        return super().get_queryset(request).filter(organisation_id=request.user.employee.organisation_id)

我回答这个问题是为了帮助别人,我为多种用户类型修改了我的代码,这段代码将帮助你解决这种情况,这样只有与部门相关的用户才能看到其他用户,但超级用户可以控制所有人.感谢@ruddra 和@MK Patel 的宝贵努力。

>     class RestrictedFormAdmin(admin.ModelAdmin):
>         class Meta:
>             model = Employee
>         def get_queryset(self, request):
>             if request.user.is_superuser:
>                 return super().get_queryset(request)
>             return super().get_queryset(request).filter(organization_id=request.user.employee.organization_id)
> 
>     admin.site.register(Employee,RestrictedFormAdmin)