質問

PHPでは、これを実行して name を配列として取得します。

<input type"text" name="name[]" />
<input type"text" name="name[]" />

または name を連想配列として取得したい場合:

<input type"text" name="name[first]" />
<input type"text" name="name[last]" />

そのようなものに相当するDjangoは何ですか?

役に立ちましたか?

解決

QueryDictのドキュメントをご覧ください、特に QueryDict.getlist(キー)

ビューのrequest.POSTとrequest.GETはQueryDictのインスタンスであるため、これを行うことができます:

<form action='/my/path/' method='POST'>
<input type='text' name='hi' value='heya1'>
<input type='text' name='hi' value='heya2'>
<input type='submit' value='Go'>
</form>

その後、次のようになります:

def mypath(request):
    if request.method == 'POST':
        greetings = request.POST.getlist('hi') # will be ['heya1','heya2']

他のヒント

これを掘り下げて申し訳ありませんが、Djangoにはutils.datastructures.DotExpandedDictがあります。そのドキュメントの一部を次に示します。

>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], \
        'person.1.lastname': ['Willison'], \
        'person.2.firstname': ['Adrian'], \
        'person.2.lastname': ['Holovaty']})
>>> d
{'person': {'1': {'lastname': ['Willison'], 'firstname': ['Simon']}, '2': {'lastname': ['Holovaty'], 'firstname': ['Adrian']}}}

唯一の違いは、角括弧の代わりにドットを使用することです。

編集:このメカニズムはフォームプレフィックスに置き換えられましたが、この概念を引き続き使用する場合は、アプリにドロップできる古いコードを次に示します。 https://gist.github.com/grzes/73142ed99dc8ad6ac4fc9fb9f4e87d60

Djangoは、リクエストオブジェクトから連想配列(Pythonの辞書)を取得する方法を提供していません。最初の答えが指摘したように、必要に応じて .getlist()を使用するか、 QueryDict を取得して好みに合わせて再編成できる関数を作成できます(キーを抜くキーが key [*] パターンに一致する場合の/ valueペアなど)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top