Flaskは、最初の検証時に動的に追加された入力フィールドを認識しません

sdo

ユーザーがボタンをクリックすると、ボタンを介して動的に新しいファイルアップロードフィールドを追加します。検証は1秒おきの試行でのみ渡されます。これは、flask / wtformsが動的に作成された新しい入力フィールドを認識しないためです。送信ボタンをクリックするたびに、ファイルが欠落していることを最初のフィールドに対してのみ警告します。

必要なすべてのファイルを入力して送信すると、最初の試行では失敗しますが、その後、フィールドリストが必要なサイズに初期化され、次に同じ量のファイルを送信したときに機能します。

forms.py

class ChildForm(FlaskForm):
    class Meta:
        csrf = False

    childvalue1= IntegerField(default=1, validators=[DataRequired()])
    childvalue2= FileField(validators=[FileRequired(),FileAllowed(['mp3'])])


class ParentForm(FlaskForm):
    parentvalue1= FileField('PDF File', validators=[FileRequired(), FileAllowed(['pdf'])])
    parentfieldlist= FieldList(FormField(ChildForm), min_entries=1)
    submit = SubmitField('Upload')

htmlファイル

<form action="" method="post" enctype="multipart/form-data">
        {{ form.hidden_tag() }}

        <!-- PDF Upload -->
        <div>
            <label class="label">{{ form.parentvalue1.label }}</label>
            {{ form.parentvalue1}}
            <br>
        </div>

        <!-- Audio Upload -->
        <br>
        <div>
            <label class="label">{{ form.parentfieldlist.label }}</label>
            <table id="audiotable">
                {% for entry in form.parentfieldlist%}
                <tr>
                    {% for subfield in entry %}
                    <td>{{ subfield }}</td>
                    {% endfor %}
                </tr>
                {% endfor %}
            </table>
        </div>

        <br>
        <button type='button' class="add_more">Add More Files</button>
        <br><br>
        <p> {{ form.submit(class='button is-link') }}

    </form>

より多くの入力フィールドを作成するJS

<script>

    String.format = function () {
        var s = arguments[0];
        for (var i = 0; i < arguments.length - 1; i++) {
            var reg = new RegExp("\\{" + i + "\\}", "gm");
            s = s.replace(reg, arguments[i + 1]);
        }
        return s;
    }

    var fieldNum = 1;
    $('.add_more').click(function (e) {
        e.preventDefault()
        var firstTag = "parentfieldlist-" + fieldNum + "-childvalue1"
        var secondTag = "parentfieldlist-" + fieldNum + "-childvalue2"
        var rowTemplate = `<tr><td><input type='text' id=${firstTag } name=${firstTag } value=${fieldNum + 1} /></td>
            <td><input type='file' id=${secondTag } name=${secondTag }/></td></tr>`;
        $("#audiotable").append(rowTemplate);
        fieldNum++;
    });
    
</script>

誰かがそれを機能させる方法を知っていますか?もう一つの例。2番目のアップロードフィールドを追加して送信すると、関数は次のように出力します。

[{'childvalue1': 1, 'childvalue2': <FileStorage: 'somefile.mp3' ('audio/mpeg')>}, {'childvalue1': 2, 'childvalue2': None}]

もう一度やり直して提出すればうまくいきます。append_entry()を使用するPython関数へのajax呼び出しを使用したハッキーな解決策がいくつかありますが、私はそれらを確信しておらず、それらが本当に問題を解決するかどうかはわかりません。本質的に、ファイルは最初の送信時に常になしです

編集:childvalue 2から「FileRequired」を削除すると、まったく機能しません。これが私の意味を示す写真です

ここに画像の説明を入力してください

フォームは、ボタンで追加した2番目のアップロードフィールドを認識していません提案をありがとう

sdo

答えは非常に単純でしたが、私にはそれほど明白ではありませんでした。

<input type='file' id=${secondTag } name=${secondTag }/>

デフォルト値があるので入力した最初の子値と同じように、このようにする必要があります

<input type='file' id=${secondTag } name=${secondTag } value=""/>

これで、Flaskは送信/検証時に動的に追加されたファイルを認識します。最初の値は常に送信されているので、最初から明らかだったはずですが、2番目の値は「none」であり、2つの間の「値」だけが異なります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JQueryは、動的に追加された入力フィールドを他の動的に追加された入力フィールドに対して検証します

分類Dev

動的に追加された入力フィールドが渡されました 検証と送信は別のページにできません

分類Dev

動的に生成された入力フィールドにjQuery検証を追加できませんか?

分類Dev

jqueryは動的に追加された入力フィールドIDを取得していません

分類Dev

Unity5.3-入力フィールドは押されたときに最初の「リターン」キーを検出しません

分類Dev

Jquery検証は、フォームが生成されると、各入力のルールを動的に追加します

分類Dev

動的に追加されたフォーム(フィールドではありません!)を使用したBootstrapValidator検証

分類Dev

動的に追加されたフォーム(フィールドではありません!)を使用したBootstrapValidator検証

分類Dev

入力された入力値を確認し、次のフィールドに移動します

分類Dev

フォームに動的に追加された入力フィールドをノードjsが認識しない

分類Dev

Railsは動的にネストされた形式(2レベル)で別の入力フィールドを追加することはできません

分類Dev

PHPは入力フィールドの名前を認識しません

分類Dev

動的に作成された入力フィールドの変更された値を取得できません

分類Dev

フォームに入力しますが、検証ではフィールドの内容は取得されません

分類Dev

EditTextフィールドは、フィールドにデータを入力してもnullとして認識されるため、プログラムはさらに進みません。

分類Dev

有効な入力を入力し、残りの入力フィールドを空にしてフォームを送信した後、JS検証が実行されません

分類Dev

3つの入力フィールドを検証した後、ボタンが次のURLに移動しません

分類Dev

Onclickは、入力フィールドにターゲット値が入力されたdivと正規表現の検証を表示します

分類Dev

onClickボタンは入力フィールドにフォーカスを追加しますが、その入力は表示されません

分類Dev

検証後、入力されたフィールドは空になります

分類Dev

送信時に正規表現の検証を確認し、空の場合はすべての入力フィールドにフォーカスします

分類Dev

Eloquentは、コンストラクターをモデルに追加するときに、入力可能なフィールドを認識しません

分類Dev

空の(入力されていない)フィールドの「入力時に」Orbeon検証を無効にしますか?

分類Dev

動的に追加されたフォーム入力の検証-VanillaJS

分類Dev

南は追加されたモデルフィールドを認識していませんか?

分類Dev

JQuery Mobile 1.4は、動的に追加された入力コントロールの<label>を表示しません

分類Dev

フォームの追加が呼び出されたときに ID フィールドを自動入力できません

分類Dev

anglejs検証はテキストフィールドへの入力に隠れていません

分類Dev

検証はループの最初の入力フィールドに対してのみ機能します

Related 関連記事

  1. 1

    JQueryは、動的に追加された入力フィールドを他の動的に追加された入力フィールドに対して検証します

  2. 2

    動的に追加された入力フィールドが渡されました 検証と送信は別のページにできません

  3. 3

    動的に生成された入力フィールドにjQuery検証を追加できませんか?

  4. 4

    jqueryは動的に追加された入力フィールドIDを取得していません

  5. 5

    Unity5.3-入力フィールドは押されたときに最初の「リターン」キーを検出しません

  6. 6

    Jquery検証は、フォームが生成されると、各入力のルールを動的に追加します

  7. 7

    動的に追加されたフォーム(フィールドではありません!)を使用したBootstrapValidator検証

  8. 8

    動的に追加されたフォーム(フィールドではありません!)を使用したBootstrapValidator検証

  9. 9

    入力された入力値を確認し、次のフィールドに移動します

  10. 10

    フォームに動的に追加された入力フィールドをノードjsが認識しない

  11. 11

    Railsは動的にネストされた形式(2レベル)で別の入力フィールドを追加することはできません

  12. 12

    PHPは入力フィールドの名前を認識しません

  13. 13

    動的に作成された入力フィールドの変更された値を取得できません

  14. 14

    フォームに入力しますが、検証ではフィールドの内容は取得されません

  15. 15

    EditTextフィールドは、フィールドにデータを入力してもnullとして認識されるため、プログラムはさらに進みません。

  16. 16

    有効な入力を入力し、残りの入力フィールドを空にしてフォームを送信した後、JS検証が実行されません

  17. 17

    3つの入力フィールドを検証した後、ボタンが次のURLに移動しません

  18. 18

    Onclickは、入力フィールドにターゲット値が入力されたdivと正規表現の検証を表示します

  19. 19

    onClickボタンは入力フィールドにフォーカスを追加しますが、その入力は表示されません

  20. 20

    検証後、入力されたフィールドは空になります

  21. 21

    送信時に正規表現の検証を確認し、空の場合はすべての入力フィールドにフォーカスします

  22. 22

    Eloquentは、コンストラクターをモデルに追加するときに、入力可能なフィールドを認識しません

  23. 23

    空の(入力されていない)フィールドの「入力時に」Orbeon検証を無効にしますか?

  24. 24

    動的に追加されたフォーム入力の検証-VanillaJS

  25. 25

    南は追加されたモデルフィールドを認識していませんか?

  26. 26

    JQuery Mobile 1.4は、動的に追加された入力コントロールの<label>を表示しません

  27. 27

    フォームの追加が呼び出されたときに ID フィールドを自動入力できません

  28. 28

    anglejs検証はテキストフィールドへの入力に隠れていません

  29. 29

    検証はループの最初の入力フィールドに対してのみ機能します

ホットタグ

アーカイブ