hiramatsu0415
@hiramatsu0415

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 success.messageについて

解決したいこと

お世話になります。
ログイン時とメッセージ送信時に、views.pyに
messages.success(request,'ログインに成功しました。')
messages.success(request, '送信に成功しました。')
と書き、runserverしたところログイン時には正しく表示されたのですが、
メッセージ送信画面に進むと、' ログインに成功しました 'と表示されておりました。
ログイン時のmessageが、メッセージ送信画面にも反映されてしまうのを防ぎたいのですが、
方法はございますでしょうか?
どうぞよろしくお願いいたします。

該当するソースコード

views.py
def user_login(request):

  login_form = forms.LoginForm(request.POST or None)
  if login_form.is_valid():
    email = login_form.cleaned_data.get('email')
    password = login_form.cleaned_data.get('password')
    user = authenticate(email=email, password=password)

    if user:
      if user.is_active:
        login(request,user)
        messages.success(request,'ログインに成功しました。')
        return redirect('SellText:product_search_view')##
      else:
        return HttpResponse('アカウントが有効ではありません')
    else:
      return HttpResponse('ユーザーが存在しません')      
  return render(request, 'login.html',context={
    'login_form':login_form
  }) 

//下記はメッセージ送信画面用です
def not_good_product(request, not_good_product_id):
  form = forms.NotGoodProductReportForm(request.POST or None)

  product = Product.objects.get(id=not_good_product_id)#商品からユーザーは見つかるから大丈夫

  if form.is_valid():
    print(1)
    form.instance.user = product.user
    form.instance.product = product
    print(2)
    form.save()
    messages.success(request, '送信に成功しました。')
    print(form.errors)
  return render(request, 'bad_report_to_us.html', context={
  'product':product,'form':form,  })
login.html
{% if messages %}

{% for message in messages %}
    <li class="text-center">{{ message }}</li>
    {% endfor %}
{% endif %}
bad_report_to_us.html
{% if messages %}

{% for message in messages %}
    <li class="text-center">{{ message }}</li>
    {% endfor %}
{% endif %}

スクリーンショット 2021-05-28 9.38.09.png

スクリーンショット 2021-05-28 9.38.15.png

ユーザー情報の更新ページでもこのような現象が起きており、
このように更新した時だけmessageを表示させたいのですが、ログイン時のmessageがすでに表示されております

0

1Answer

Comments

  1. @hiramatsu0415

    Questioner

    urlのことでしょうか?
    よろしくお願いいたします
  2. print(1)

    などと書かれているので、どこまでが通ってるののかを詳しく知りたいです。
    デバッグされましたか?
  3. @hiramatsu0415

    Questioner

    こちらはすべ正常に動いております。
    messageの部分だけが重複してしまっている状態です。
    画像をアップいたしましたので、よろしくお願いいたします

  4. 質問には「ログインに成功しました。」と表示されてしまうのが問題と書かれてましたが、そちらの画像では「送信に成功しました。」と表示されてます。
  5. @hiramatsu0415

    Questioner

    ログインした時に、ログインページに"ログインに成功しました。"
    メッセージを送信したときに、メッセージ画面に"メッセージを送信しました。"
    ユーザー情報を更新した際に、"更新画面に"更新完了しました。"
    と表示させる用にしております。

    先ほどアップした2枚の画像はユーザー情報変更画面です。
    この画面では更新ボタンを押すと、"更新完了しました"とメッセージが出るようにしているのですが、
    ユーザー情報更新画面に入ると、画像1枚目のように"ログインに成功しました。"と出てしまいます。このメッセージはログイン時にログイン画面で出るようにしてあるのですが、なぜこうなってしまうのかがわからないです。
    更新ボタンを押すと”ログインに成功しました。”というメッセージが消え、"更新完了しました"と正しく表示されます。
    よろしくお願いいたします。

Your answer might help someone💌