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

时间:2015-05-14 20:11:34

标签: django permissions admin

我正在尝试使用django admin构建自助服务网站。假设用户只能编辑自己的数据。我可以确保他只能通过这种方式检索自己的记录:

# 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)

虽然保存怎么样?为了使View显示在管理界面中,用户需要更改PersonalData条目的权限。如何在接收POST请求时检查该对象属于该用户? 我想我需要为此实现一个ModelForm:

class PersonDataForm(ModelForm):
pass

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

1 个答案:

答案 0 :(得分:0)

我会选择重写

ModelAdmin.has_change_permission(request, obj=None)

您可以在其中更改request.user与对象。另请参阅相关的ModelAdmin.has_*_permission()方法。

对于restring查看对象,请检查:

View permissions in Django