junjungaoon
@junjungaoon

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

djangoのclassbasedviewでredirectしたい

こんにちは、現在djangoでWebアプリの開発をしているのですが、リダイレクトのやり方がわからずにいます。

お金を払っているユーザーはページを表示し、そうでないユーザーは支払いページにリダイレクトさせたいのです。
しかしクラスベースビューの場合の処理がわかりません。

実際のコード

class query(LoginRequiredMixin,ListView):
    template_name ="display_data.html"
    model = User_base_info
    paginate_by   = 30

    def get_queryset(self, **kwargs):
        log_folder = "/home/worker/odem/Odem/Odem/logs/log.log"
        logger = setup_logger(log_folder)
-------------------------省略----------------------------------
     return queryset 

やったこと
こちらの記事を参考に
RedirectViewを継承させて使えばいいのかと思い試したのですが通常のページが表示されるだけでした。

class query(LoginRequiredMixin,ListView,RedirectView):
    template_name ="display_data.html"
    model = User_base_info
    paginate_by   = 30
    def redirect(self, msg):
        if self.request.user.billing_course < 50000:#ユーザーの月の支払いが5万未満の時はリダイレクト
            url ='http://***,***,***,***/main/pay'#指定のURL
            super().get(self, request, *args, **kwargs)



    def get_queryset(self, **kwargs):
        log_folder = "/home/worker/odem/Odem/Odem/logs/log.log"
        logger = setup_logger(log_folder)

     -------------------------省略----------------------------------
        return queryset 

よろしくお願いいたします。

0

2Answer

getメソッドをオーバーライドするのが良いかと思います。

from django.http import HttpResponseRedirect
class query(LoginRequiredMixin,ListView):
     :
     ()
     :
    def get(self, request, *args, **kwargs):
        if self.request.user.billing_course < 50000:#ユーザーの月の支払いが5万未満の時はリダイレクト
           return HttpResponseRedirect('http://***,***,***,***/main/pay')
       # リダイレクトしない場合は、元々のgetメソッドを呼び出す
        return super().get(request, *arg, **kwargs)
1Like

回答になってないので恐縮ですが、私は複雑な処理をする場合defで書いちゃってますw

views.py
@login_required
def query(request)
    if request.user.billing_course < 50000:
        return redirect('http://***,***,***,***/main/pay')
    else:
        user_info =  User_base_info.objects.all()
        必要な処理
        context = {}
        return render(request, "display_data.html", context)

継承に詳しい方の回答が得られると良いですね!

P.S. リンクにURLがないみたいです。

0Like

Your answer might help someone💌