HTTPリクエストは、1つのパラメータ(キー)に割り当てられた複数の値をサポートします。そういうわけで、人々はそれを使って(時には)使うことができるのです。それで、DjangoがMultiValueDict
構造を導入した理由です。
get()
とgetlist()
に分割すると、エラーを回避してビューコードを簡単に保つことができます。
get()
は常にリストを返す:彼らはすべてまったく同じことを行うにはより多くのコードを必要とし、他の行動を考えてみましょう。
ほとんどの場合、1つのキーに1つの値を渡すので、[0]
を追加し、デフォルト値をリストとして提供する必要があります。
param = request.GET.get('param', ['default value',])[0]
get()
値の数に応じて、単一の値又はリストを返します。
これは、複数のオプションが許可されたHTMLセレクトの欠点です。人々はゼロ、1つ以上の値を選択できます。それはあなたが自分でリストしたり、反対方向にするために単一の値を変換する必要があります意味:
常に単一の値を返す
params = request.GET.get('params', [])
# Here you have absolutely no idea if this is a list or a single value
# But you will need only one of that types
# If you need list: ---------------------------------
if not isinstance(params, list):
params = [params,]
objs = TestModel.objects.filter(id__in=params).all()
# If you need single value: -------------------------
if isinstance(params, list):
params = params[0] # Error if params is empty list...
obj = TestModel.objects.get(id=params)
get()
。その場合、getlist
なしで複数の値をどう扱うのですか?
質問に答えるために、get/getlist
という付加価値があります。
私にとってこれは嫌なものです – Goin