使用django admin,如何确保用户只能访问他们自己的对象?

使用django admin,如何确保用户只能访问他们自己的对象?,django,permissions,admin,Django,Permissions,Admin,我正试图建立一个自助服务网站使用django管理员。假设用户只能编辑自己的数据。我可以确保他只能通过以下方式检索自己的记录: # admin.py class PersonalDataAdmin(admin.ModelAdmin): model = PersonalData exclude = ('data_confirmed',) list_display = ('first_name', 'last_name', 'email') def get_queryset(self, reques

我正试图建立一个自助服务网站使用django管理员。假设用户只能编辑自己的数据。我可以确保他只能通过以下方式检索自己的记录:

# admin.py
class PersonalDataAdmin(admin.ModelAdmin):
model = PersonalData
exclude = ('data_confirmed',)
list_display = ('first_name', 'last_name', 'email')

def get_queryset(self, request):
    qs = super(PersonalDataAdmin, self).get_queryset(request)
    if request.user.is_superuser:
        return qs
    return qs.filter(user=request.user)
那么储蓄呢?为了让视图显示在管理界面中,用户需要更改PersonalData条目的权限。我如何在收到POST请求时检查对象是否属于用户? 我想我需要为此实现一个模型:

class PersonDataForm(ModelForm):
pass

并将其添加到PersonalDataAdmin。然后我可以覆盖clean()或save()方法。走这条路对吗?同样对于每个用户只有一条记录的情况,是否可以跳过更改列表视图并直接链接到更改视图?

我会选择覆盖

ModelAdmin.has_change_permission(request, obj=None)
您可以在其中更改request.user与对象。另请参见相关的
ModelAdmin.has.*\u permission()
方法

要重新限制对象的查看,请选中:


为管理员创建自定义表单时,您将无法访问request.user,也无法验证权限。我想你必须覆盖管理视图。请参见中的最后几段