首页 > 解决方案 > Django 使用 has_change_permission 确定所有者

问题描述

我想限制其他用户更改所有者用户以外的对象实例。

为此,我正在使用has_change_permission管理模型功能,但它不起作用。

我的模型:

class Book(models.Model):
    author = models.ForeignKey(User, related_name = 'book_author')
    ...

在我的 admin.py

class BookAdmin(admin.ModelAdmin):
    def has_change_permission(self, request, obj):
        if request.user.is_super_user():
            return True
        elif request.user == obj.author:
            return True
        else:
            return False
        if obj is None:
            return False

在我看来.py

class BookUpdate(generic.UpdateView):
    model = Book
    form_class = BookUpdateForm
    template_name = 'accounts/book_update.html'
    def get_object(self, *args, **kwargs):
        return Book.objects.get(id=self.kwargs.get('id'))

在我的网址中:

url(r'^update_book/(?P<id>[\w-]+)/$', views.BookUpdate.as_view(),name='update_book')

现在,当任何人访问此 url 模式时都可以编辑这本书,但我需要只有作者才能编辑这本书。

这样做是has_change_permission正确的方法,还是其他更好的方法?

标签: djangopython-3.xdjango-modelsdjango-formsdjango-views

解决方案


这仅适用于 Django 管理界面。看起来您正在尝试以Book自定义形式更新您的实例。例如,您可以覆盖save()模型的方法并在此处检查权限。请参阅文档的这一部分


推荐阅读