0

だから私はサイトを PHP(Codeigniter) から Django に変換しています。私はほとんどの問題を理解できますが、これで立ち往生しています。

PHPで私はできる$e->estimate = json_encode($_POST['estimate']);

HTML 入力配列を JSON でエンコードされた文字列として DB に格納するために、python/django は同様の機能を提供しますか。

私は見てsimplejson.dumps(request.POST['estimate'])いますが、それは MultiValueDictKeyError をスローします

POSTには次のようなアイテムが含まれていますestimate[discount] estimate[tax]
estimate[shipping]

Django/Python で上記を実行し、HTML 入力配列を取得し、JSON で econde して DB に保存できますか

4

2 に答える 2

0

あなたが遭遇した問題MultiValueDictKeyErrorは、 there is no estimatekey insideを表すものMultiValueDict request.POSTです。試す

# list existed keys
request.POST.keys()
# or
discount = request.POST.get('estimate[discount]')
tax = request.POST.get('estimate[tax]')
shipping = request.get('estimate[shipping]')

次に、次のようなものを構築できます

estimate = dict(discount=discount, tax=tax, shipping=shipping)
simplejson.dumps(estimate)

ただし、これはDjango のプロセス フォームの通常の方法ではありません

于 2012-04-17T02:55:47.580 に答える
0

django のドキュメントを見た後、request.POST が QueryDict オブジェクトであることがわかりました。

クラス QueryDict

HttpRequest オブジェクトでは、GET および POST 属性は django.http.QueryDict のインスタンスです。QueryDict は、同じキーの複数の値を処理するためにカスタマイズされた辞書のようなクラスです。一部の HTML フォーム要素、特に は同じキーに対して複数の値を渡すため、これが必要です。

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDictで。

ディクショナリ (JSON オブジェクトまたは Python dict) は複数のキーを持つことができないため、JSON シリアライザーは同じキーが複数あることを示す MultiValueDictKeyError をスローしています。

PHPがどのようにそれを行っていたかはわかりませんが、修正は次のいずれかになります

  1. POST QueryDict をコピーして内容を変更し、重複するキーがないようにします。

  2. 送信中のフォームデータを変更します。

QUERYDict の理由は、フォームが送信された場合、複数選択フィールドなどのために、フォームから複数のキーを有効に取得する可能性があるためです。

それが役立つことを願っています。

マーク

于 2012-04-17T02:47:06.057 に答える