django - 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
正确的方法,还是其他更好的方法?
解决方案
这仅适用于 Django 管理界面。看起来您正在尝试以Book
自定义形式更新您的实例。例如,您可以覆盖save()
模型的方法并在此处检查权限。请参阅文档的这一部分。
推荐阅读
- android - 如何获取以 userId 作为电话号码的用户的所有名称并将其存储在列表视图中?
- apache - 反向代理 apache2 后面的 Mattermost docker 重定向错误
- c# - 如何使用 SendMessage (WM_COPYDATA) 将消息从 C# 发送到 C++ (MESSAGE ONLY WINDOW)?
- sql - 查找商品名称以及卖家 ID 和买家 ID,以便卖家将商品出售给买家
- c# - Blazor Webassembly (PWA) 独立(不在 asp.net 核心中托管)是否支持会话存储?
- c# - Xamarin Forms Sqlite 创建任务
- c - c cpu 中的 time.h 库是否密集?
- javascript - 如何在不破坏 JavaScript 的情况下使用 PHP 在页面上填充 HTML 表格?
- kubernetes - K8s 运行 kubectl logs -f 时打印的日志存储在哪里
- java - 使用符号而不是属性的字符串解析 JSON 结构