PHPのフォーム値配列/連想配列に相当するDjango
質問
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ペアなど)。
所属していません StackOverflow