Django使用has_change_permission确定所有者

时间:2018-08-15 20:21:38

标签: django python-3.x django-models django-forms django-views

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

为此,我正在使用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

在我的views.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是这样做的正确方法,还是其他更好的方法?

1 个答案:

答案 0 :(得分:0)

这仅在Django管理界面中有效。您似乎正在尝试以自定义格式更新Book实例。例如,您可以覆盖模型的save()方法,然后在此处检查权限。参见文档的this part