2017-03-07 11 views
-1

views.py投稿の作成者だけがクラスベースのビューで編集できるようにしてください - Django?

class EditPost(UserPassesTestMixin, LoginRequiredMixin, UpdateView): 
    model = Posts 
    form_class = PostForm 
    template_name="posts/add_post.html" 

    def test_func(self): 
     x = self.request.user.pk 
     print (x) 
     y = Posts.objects.get(user='user') 
     print (y) 
     if x == y: 
      return True 
     else: 
      if self.request.user.is_authenticated(): 
       raise Http404("You are not allowed to edit this Post") 

models.py私はLOGGEDINユーザーとポストのユーザーオブジェクトに一致するにはどうすればよい

class Posts(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    post = models.CharField(max_length=1200, blank=False) 

私は以来、任意の解決策を見つけることができませんでしたクラスベースのビューを使用しています。

答えて

1

はこれを試して取得します:

追加派遣EditPostクラス

def dispatch(self, request, *args, **kwargs): 
    obj = self.get_object() 
    if obj.user != self.request.user: 
     return Http404("You are not allowed to edit this Post") 
    return super(EditPost, self).dispatch(request, *args, **kwargs) 
+0

yesに!ありがとうございました!できます – Rahul

1

test_funcのチェックを行うのは難しいです。 test_funcでオブジェクトを1回フェッチして、そのオブジェクトが使用できるかどうかをチェックしてから、同じフィールドでオブジェクトを再度フェッチする必要があります。

簡単な方法は、get_querysetメソッドをオーバーライドすることです。ユーザーは、ポストの著者ではない場合、彼らは404

class EditPost(LoginRequiredMixin, UpdateView): 
    def get_queryset(self): 
     return super(EditPost, self).filter(user=self.request.user) 
関連する問題