【问题标题】:django class based delete view and validation基于 django 类的删除视图和验证
【发布时间】:2015-08-25 03:48:10
【问题描述】:
我的看法:
class ModEmailDeleteView(DetailView):
model = EmailModel
template_name = "email_delete.html"
success_url = reverse_lazy('moderator_profile', request.user.id)
这里我想检查特定字段的用户是否是请求用户,然后只有他可以删除。喜欢
if obj.user == request.user
那么只有他可以删除或抛出404
如果我在 url 中有多个主键怎么办?并希望使用这些主键进行不同的验证
【问题讨论】:
标签:
python
django
django-class-based-views
【解决方案1】:
你可以这样做:
class ModEmailDeleteView(DeleteView):
model = EmailModel
template_name = "email_delete.html"
success_url = reverse_lazy('moderator_profile', request.user.id)
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
if self.object.user == request.user:
self.object.delete()
return HttpResponseRedirect(self.get_success_url())
else:
raise Http404 #or return HttpResponse('404_url')
【解决方案2】:
django Deleview 有 mixin,你只需覆盖删除
在你看来功能,
class DeletionMixin(object):
"""
A mixin providing the ability to delete objects
"""
success_url = None
def delete(self, request, *args, **kwargs):
"""
Calls the delete() method on the fetched object and then
redirects to the success URL.
"""
if self.object.user = request.user:
self.object.delete()
success_url = self.get_success_url()
self.object.delete()
return HttpResponseRedirect(success_url)