代码之家  ›  专栏  ›  技术社区  ›  Pankaj Sharma

Django使用has_change_权限确定所有者

  •  0
  • Pankaj Sharma  · 技术社区  · 7 年前

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

    因为我用的是 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中:

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

    现在,当任何人转到这个url模式可以编辑书籍,但我需要只有作者可以编辑这本书。

    有更改权限 正确的方法,还是其他更好的方法?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Cyrlop    7 年前

    这只适用于django管理界面。看起来你想更新你的 Book 自定义窗体中的实例。例如,您可以覆盖 save() 方法并检查此处的权限。见 this part 医生的。