Python 如何为Django中的特定用户和特定项目使用deleteview?
我有这些模型。每个回复可以没有、一个或多个帖子。Post是用户特定的。如何使删除视图,以便用户只能删除他的帖子,而不能删除回复中其他人的帖子。 我尝试了很多次,但我的观点是删除一些其他用户的帖子。表示任何用户都可以删除任何其他用户的帖子。 我想在每个帖子旁边做一个按钮来删除,但这个按钮应该只对那些写过帖子的人可见Python 如何为Django中的特定用户和特定项目使用deleteview?,python,django,views,Python,Django,Views,我有这些模型。每个回复可以没有、一个或多个帖子。Post是用户特定的。如何使删除视图,以便用户只能删除他的帖子,而不能删除回复中其他人的帖子。 我尝试了很多次,但我的观点是删除一些其他用户的帖子。表示任何用户都可以删除任何其他用户的帖子。 我想在每个帖子旁边做一个按钮来删除,但这个按钮应该只对那些写过帖子的人可见 class Reply(models.Model): User = models.ForeignKey(settings.AUTH_USER_MODEL) Questi
class Reply(models.Model):
User = models.ForeignKey(settings.AUTH_USER_MODEL)
Question = models.ForeignKey(Doubt, on_delete=models.CASCADE)
reply = models.TextField(max_length=40000)
last_updated = models.DateTimeField(auto_now_add=True)
image = models.ImageField(upload_to = upload_image_path, null = True, blank = True)
created_at = models.DateTimeField(auto_now_add=True)
def Post(self):
return reverse("community:post", kwargs={"pk": self.pk})
class Post(models.Model):
post = models.TextField(max_length=4000)
reply = models.ForeignKey(Reply, on_delete = models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
time = models.DateTimeField(null=True)
User = models.ForeignKey(settings.AUTH_USER_MODEL)
如果在
settings.py
中启用了AuthenticationMiddleware
,则视图函数中的请求对象将包括一个用户模型。然后,您的视图将如下所示:
from django import http
def get_post_from_request(request):
... something to pull up the post object from the request ...
return the_post
def delete_post(request):
the_post = get_post_from_request(request)
if request.user == the_post.User:
the_post.delete()
return http.HttpResponseRedirect("/your/success/url/")
else:
return http.HttpResponseForbidden("Cannot delete other's posts")
from django.views.generic import DeleteView
from django import http
class PostView(DeleteView):
model = Post
success_url = '/your/success/url/'
# override the delete function to check for a user match
def delete(self, request, *args, **kwargs):
# the Post object
self.object = self.get_object()
if self.object.User == request.user:
success_url = self.get_success_url()
self.object.delete()
return http.HttpResponseRedirect(success_url)
else:
return http.HttpResponseForbidden("Cannot delete other's posts")
如果使用的是基于类的通用视图,则视图可能更像这样:
from django import http
def get_post_from_request(request):
... something to pull up the post object from the request ...
return the_post
def delete_post(request):
the_post = get_post_from_request(request)
if request.user == the_post.User:
the_post.delete()
return http.HttpResponseRedirect("/your/success/url/")
else:
return http.HttpResponseForbidden("Cannot delete other's posts")
from django.views.generic import DeleteView
from django import http
class PostView(DeleteView):
model = Post
success_url = '/your/success/url/'
# override the delete function to check for a user match
def delete(self, request, *args, **kwargs):
# the Post object
self.object = self.get_object()
if self.object.User == request.user:
success_url = self.get_success_url()
self.object.delete()
return http.HttpResponseRedirect(success_url)
else:
return http.HttpResponseForbidden("Cannot delete other's posts")
如果您想要帮助导航基于类的视图(它们具有密集的继承层次结构),我可以推荐-它们在删除视图上的细分是您可以显示您尝试用于处理删除的视图吗?