bugfix> python > 投稿

ロックダウン中にコーディングを開始したので、私は非常に新しいです。私が作ったものは醜いモンスターかもしれないので注意してください。グーグルが私の必要な時に私を捨てたので、どんな助けでもありがたいです。

Film/TV/Bookのいずれかであるブートストラップモーダルにフォームを追加しました。私の問題は、常にテレビを考えていることです。これはすべて、3つの異なるURLと3つの別々のPOSTリクエストがある場合に機能しましたが、私は空想を感じたかったのです。

3つのボタンで、その「area_type」がボタン名とPOSTを使用していることを伝えようとしています。

<div class="btn-group mr-2" role="group" aria-label="second group">
                <div class="dropright">
                    <a class="btn btn-primary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown"
                        aria-haspopup="true" aria-expanded="false">
                        Add Items
                    </a>
                
                    <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
                        <a class="dropdown-item" data-toggle="modal" data-target="#exampleModal" name="Film">Add Film</a>
                        </form>
                        <a class="dropdown-item" data-toggle="modal" data-target="#exampleModal" name="TV">Add TV</a>
                        <a class="dropdown-item" data-toggle="modal" data-target="#exampleModal" name="Book">Add Book</a>
                    </div>
                </div>
            </div>
<div class="form-group">
        <form action="/{{franchises_details.franchise_slug}}/{{area|lower}}" method="POST" enctype="multipart/form-data">
            <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
                <div class="modal-dialog" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                    </div>
                    <div class="modal-body">
                        {% csrf_token %}
                        {{franchises_details.franchies_name}}: {{area}}
                        {{form.name}}
                        {% if not area == "Film" %}
                            Number of Ep:{{form.number_of_episodes}}
                        {% endif %}                    
                    <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                    <input type="submit" class="btn btn-primary" value="Film" name="Film"/>
                    </div>
                </div>
                </div>
                </div>
            </div>
        </form>
    </div>

getリクエストで「TV」に設定しました(空白のままにしたときに倒れたという理由だけで)。これが私の問題の最初の部分だと思います。投稿リクエストで、ボタン名を確認します。

def franchise_details(request,franchise_slug):    
    franchises_details = Franchise.objects.get(franchise_slug=franchise_slug)
    form_type = forms.CreateFranchiseItemEp
    if request.method == 'POST':
        if "Film" in request.POST:
            area = "Film"
            form_type = forms.CreateFranchiseItemNoEp
        if "TV" in request.POST:
            area = "TV"
            form_type = forms.CreateFranchiseItemEp
        if "Book" in request.POST:
            area = "Book"
            form_type = forms.CreateFranchiseItemNoEp
        form = form_type(request.POST)
        if form.is_valid():
            form_instance = form.save(commit=False)
            form_instance.author = request.user
            form_instance.franchies_name_id = franchises_details.id
            form_instance.area_type = area
            if area == "Film":
                form_instance.number_of_episodes = 0
            if area == "Book":
                form_instance.number_of_episodes = 0
            form_instance.all_user_average = 0
            form_instance.save()
            return redirect('/' + franchises_details.franchise_slug)
    else:       
        form = form_type() 
        area = "TV"
       
    return render(request, 'franchises_details.html', {'franchises_details': franchises_details, 'franchises_user': franchises_user, 'franchise_items_films':franchise_items_films, 'franchise_items_tvs':franchise_items_tvs,'franchise_item_users_film':franchise_item_users_film,'franchise_item_users_tv':franchise_item_users_tv, 'form':form,'area':area})

通常、ここにはもう少しありますが、少し忙しいので質問のために削除しました。これが唯一の関連部分だと思います。

私の「if "Film/TV/Book" in request.POST:」は何もしないように見えます。問題はこれです意図が示唆していること 。エーテル私はそれを台無しにしたか、もはや問題ではありませんが、私はこの段階で元気で本当に失われています。

tl;drどのボタンを押していますか?テレビだと思うフィルムボタンを押します。同じ変数を持つ個別のURLとして機能します

私が言ったように、私はほとんど半分の知識とコピー&ペーストで作業しているので、どんな助けも素晴らしいでしょう

回答 2 件
  • わかりました、私はばかです。私はテレビ用に設定された古いURLでこのコードを実行していました

    また、ボタン名はFilmなので、送信ごとにボタンが必要でしたが、現在は機能しています

  • Djangoを使い始めたときも同様の問題が発生しました。私はレストランの予約フォームを作成していましたが、ユーザーからの入力に応じて、フォームをその場で変更したいと考えていました。

    問題は、バックエンドにフロントエンドロジックを制御させたいということであり、それは非常に非効率的です。

    あなたができることは2つあります。

    Djangoの組み込みビューは制限されており、派手なフロントエンドの処理を実行できないため、ユーザーエクスペリエンスが悪くなることを受け入れてください。

    または、まったく新しい世界になるDjango-REST-Frameworkのセットアップ方法を学び始めることもできます。次に、Djangoをバックエンド(のみ)サーバーとして保持し、フロントエンドロジックにJavaScriptを使用できます。習得が最も簡単なJQuery。

    注:オプション2を選択した場合、将来的には、RESTのより新しいバージョンであるGraphQL(ただし、文書化されていない)、およびJQueryの代わりにREACTjsの学習に集中できます。そして、RESTとJQueryは他の2つよりも習得しやすいので、将来的には言います

    プログラミングで頑張ってください、これが役立つことを願っています:)

あなたの答え