2017-06-09 5 views
0

私はDjangoブログのToggleのようなポストを実装しようとしています。ユーザーが自分のブログの投稿を好きになるようget_redirect_urlをオーバーライドしようとしています。次のように私はクラスを概説しました: - 私は現在、ポストスラグ上でこれをやっているRedirectViewジェネリックビューのget_redirect_url関数をオーバーライドする問題

class PostLikeToggle(RedirectView): 

    def get_redirect_url(self, *args, **kwargs): 
     slug = self.kwargs.get("slug") 
     obj = get_object_or_404(Post, slug=slug) 
     url_ = obj.get_absolute_url() 
     self.request.user 

     if user.is_authenticated(): 
      obj.likes.add(user) 
     return url_ 

しかしを、私が思う問題は、私は私のポストオブジェクトを取得していますどのようにしてあります。私は次のように私はそのためのURLパターンを定義した、SEOフレンドリーポストのリストを定義したいと思っています

url_patterns = [ 
     url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\ 
      r'(?P<post>[-\w]+)/$', views.post_detail, name = 'post_detail'), 
     url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\ 
      r'(?P<post>[-\w]+)/like/$', views.PostLikeToggle.as_view(), name = 'post_like'), 
] 

私はURLで<slug><post>を交換することにより、「スラグ」を参照するには、上記を改正しようとしました。うまくいきませんでした。次に、get_redirect_url関数で投稿を定義しようとしました。

 post = self.kwargs.get("post") 
     obj = get_object_or_404(Post, post=post) 

もう一度動作しませんでした。私はいろいろ試してみようと努力していますが、悲しいことに、運がまだありません - 私はDjangoの論争のコミュニティであなたの経験を積んだ人にそれを投げ捨てます。

ありがとうございます。

答えて

2

あなたのURLパターンに(?P<post>[-\w]+)が含まれている場合は、self.kwargs.get("slug")の代わりにself.kwargs.get("post")を使用してください。あなたはPost.slugフィールド上でフィルタリングしているので、

get_object_or_404では、あなたは、slug=なくpost=を使用する必要があります。

def get_redirect_url(self, *args, **kwargs): 
    slug = self.kwargs.get("post") 
    obj = get_object_or_404(Post, slug=slug) 
    ... 

スラグはかなりユニークより各日付に対してのみ一意である場合は、同様self.kwargsからyearmonthdayをフェッチする必要がある場合があります。

+0

こんにちはAlasdair - これは現在機能しています。ありがとうございました。私は正しい答えを受け入れました(私はあなたがなぜ115kを持っているのか分かります)。あなたのアドバイスを反映して、私はpost = self.kwargs.get( "post") 'を保ち、' obj = get_object_or_404(Post、slug = post) 'を使ってください(' obj = get_object_or_404 Post、post = post) ') –

+0

はい、そうです。あなたの問題は、' slug = '' get_object_or_404'の代わりに 'post ='を試したことでした。 – Alasdair

関連する問題