gpt4 book ai didi

python - Django - 如何将 DeleteView 限制为对象所有者

转载 作者:行者123 更新时间:2023-11-28 19:01:21 25 4
gpt4 key购买 nike

我正在尝试实现 DeleteView 并防止在用户不是所有者的情况下删除模型。我敢肯定这是一项非常微不足道的任务,但我无法找到明确的答案。到目前为止,我可以看到我的 View ,但目前每个人都可以删除该对象。

这是我的代码:

View .py :

@method_decorator(login_required, name='dispatch')
class RestaurantDeleteView(DeleteView):
model = Restaurant
template_name = 'restaurant/delete_form.html'
success_url = '/'

模型.py:

class Restaurant(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
category = models.CharField(max_length=200)
description = models.TextField()
capacity = models.IntegerField(default=0)

def get_absolute_url(self):
return reverse('detail', kwargs={'pk': self.pk})

提前致谢!

最佳答案

这可能不是最好的方法,但它说明了这一点。

在您的 views.py 中,您可以访问 self.get_object() 以获取引用中的模型实例,然后检查是否有 instance.所有者 == self.request.user。查看源代码并尽量忠实于原始代码。您所需要的只是条件检查。

像这样:

@method_decorator(login_required, name='dispatch')
class FooDeleteView(DeleteView):
model = Foo
success_url = reverse_lazy('index')

def get(self, request, *args, **kwargs):
self.object = self.get_object()
if self.object.owner != self.request.user:
return redirect(self.success_url)
return super().post(request, *args, **kwargs)

如果你很好奇,想了解更多,可以import pdb,将pdb.set_trace()放在方法的第一行,探索一下self 是什么以及它可以使用哪些方法。一旦进入方法调用,您就可以通过调用 dir(self) 来完成此操作。您会惊讶于您会发现的事物的数量。

关于python - Django - 如何将 DeleteView 限制为对象所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52276096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com