我想限制其他用户更改除所有者用户之外的对象实例。
为此,我正在使用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
是这样做的正确方法,还是其他更好的方法?
答案 0 :(得分:0)
这仅在Django管理界面中有效。您似乎正在尝试以自定义格式更新Book
实例。例如,您可以覆盖模型的save()
方法,然后在此处检查权限。参见文档的this part。