如何在view.py(CRUD类)中为创建者(作者)自定义更新和删除对象的权限?我知道类 LoginRequiredMixin 和 PermissionRequiredMixin,但我无法自定义它们以仅允许创建者(作者)更改确切的对象。 我知道如何使用 IsAdminOrReadOnly 类在 DRF 中自定义权限,例如: DRF 中的权限.py
class IsOwnerOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return bool(obj.user == request.user or request.user.is_staff)
Django 中的 view.py(没有 DRF)
class NewsUpdateView(LoginRequiredMixin, BaseMixin, UpdateView):
form_class = NewsForm
model = News
template_name = 'news/news_update.html'
Django 中的 model.py(无 DRF)
class News(models.Model):
title = models.CharField(max_length=128)
content = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
photo = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
is_published = models.BooleanField(default=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
问题是:如何在 django 中(而不是在 DRF 中)自定义权限? 先感谢您。我希望您能给我一些建议、文章链接、文档或代码示例来解决这个问题。我已阅读自定义用户和权限,但我不知道如何解决我的确切任务。
UserPassesTestMixin
。
from django.contrib.auth.mixins import UserPassesTestMixin
class NewsUpdateView(LoginRequiredMixin, UserPassesTestMixin, BaseMixin, UpdateView):
form_class = NewsForm
model = News
template_name = 'news/news_update.html'
def test_func(self):
news = self.get_object()
return news.user == self.request.user