Django仅为自己删除和更新视图

2024-06-01 02:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我在伦敦的大学写一些作业Django.In我的更新和删除视图我要确保只有对象的所有者才能更新/删除它。现在每个人都能做到。你知道吗

以下是视图:

class UpdateCar(SuccessMessageMixin, UpdateView):
    model = Car
    form_class = AddNewCarForm
    template_name = 'c2crental/car/update_car.html'
    success_url = reverse_lazy('c2crental:list_user_cars')
    success_message = _("Car has been updated.")

    def get_queryset(self):
        owner = self.request.user
        return self.model.objects.filter(owner=owner)


class DeleteCar(DeleteView):
    model = Car
    success_url = reverse_lazy('c2crental:list_user_cars')
    template_name = 'c2crental/car/delete_confirm_car.html'
    success_message = _("Car has been deleted.")

    def delete(self, request, *args, **kwargs):
        messages.success(self.request, self.success_message)
        return super(DeleteCar, self).delete(request, *args, **kwargs)

    def get_queryset(self):
        owner = self.request.user
        return self.model.objects.filter(owner=owner)

我发现了一些查询集的解决方案,如上图所示。他们不会让其他用户更新/删除对象并引发Http404错误,这很好,但是我想使用Django消息框架在页面上打印错误消息,并且不重定向到Http404页面。我该怎么做?你知道吗


Tags: djangoselfmessagemodelreturnrequestdefdelete
1条回答
网友
1楼 · 发布于 2024-06-01 02:33:14

您可以通过重写视图上的^{}^{}方法来实现这一点。你知道吗

如您所见,如果get_object找不到对象,它将抛出404,因此如果与所有者不匹配,则可以抛出403或404。你知道吗

def get_object(self, queryset=None):
    """
    Check the logged in user is the owner of the object or 404
    """
    obj = super(MyView, self).get_object(queryset)
    if obj.owner != self.request.user:
        raise Http404(
            _("You don't own this object")
        )
    return obj

相关问题 更多 >