Djangoでクエリパラメータから配列を受け取る
Djangoでクエリパラメータから配列を受け取る場合、QueryDict.getlist(key, default=None)
を使用しましょう。
QueryDict.getlist(key, default=None)
QueryDict.getlist(key, default=None)
はクエリーパラメーターの値をlist
として取得することができます。
e.g. https://example.com?foo=1&foo=2
request.GET.getlist('foo', None) # => [1, 2]
PHPのような配列として渡す場合
PHPのような配列として渡す場合は以下のようになります。
e.g. https://example.com?foo[]=1&foo[]=2
request.GET.getlist('foo[]', None) # => [1, 2]
あくまでキーは文字列として扱われるため添字には対応していません。
e.g. https://example.com?foo[0]=1&foo[1]=2
request.GET.getlist('foo[]', None) # => []
RFC 3986
クエリーパラメーターの処理がPHPやJS(query-string)などと異なるため、標準的な仕様をまとめているRFCを確認しましたが、クエリーパラメーターの形式は、key=value
の形式であることぐらいしか言及されていませんでした。
query 構成要素はしばしば “key=value” の対の形式で識別するための情報を運ぶために使用され、そこで頻繁に使用された値は別の URI の参照なので、時にはそれらの文字をパーセントエンコーディングする事を避けるほうがユーザビリティのためにはよい。
Uniform Resource Identifier (URI): 一般的構文
Go言語も添字は上手くパースされないようです。添字は当たり前に使用できるものだと思っていました。
まとめ
e.g. https://example.com?foo[]=1&foo[]=2
request.GET.getlist('foo[]', None) # => [1, 2]
添字は非対応