Python QueryDict不包含隐藏表单字段,给出多值DictKeyError

Python QueryDict不包含隐藏表单字段,给出多值DictKeyError,python,django,django-forms,csrf,hidden,Python,Django,Django Forms,Csrf,Hidden,我正在尝试将Razorpay支付网关与Django集成。如何获取Razorpay在视图中自动发送的隐藏字段 结帐/付款详情.html <form action="{% url 'checkout:preview' %}" method="POST"> <!-- Note that the amount is in its subunit value = 599 --> <script src="https://checkout.razorpay.com/v1

我正在尝试将Razorpay支付网关与Django集成。如何获取Razorpay在视图中自动发送的隐藏字段

结帐/付款详情.html

<form action="{% url 'checkout:preview' %}" method="POST">
<!-- Note that the amount is in its subunit value = 599 -->
<script
    src="https://checkout.razorpay.com/v1/checkout.js"
    data-key="rzp_test_YYUUnrrBMW42iL"
    data-amount="{{ order_total_incl_tax_cents }}"
    data-currency="INR"
    data-buttontext="Pay with Razorpay"
    data-name="{{ shop_name }}"
    data-description="{{ basket.num_items }} items ({{ order_total.incl_tax|currency }})"
    data-image="https://your-awesome-site.com/your_logo.jpg"
    data-prefill.name="Gaurav Kumar"
    data-prefill.email="test@test.com"
    data-theme.color="#F37254"
></script>
<input type="hidden" value="{{ razorpay_token_form }}" name="razorpay_payment_id">
</form>
stacktrace

Traceback (most recent call last):
  File "C:\Users\kingmaker\AppData\Local\Programs\Python\Python37-32\lib\site-packages\oscar\apps\checkout\views.py", line 580, in submit
    self.handle_payment(order_number, order_total, **payment_kwargs)
  File "C:\Users\kingmaker\workspace\blackweb_release_2.0\blackweb_services\checkout\views.py", line 44, in handle_payment
    card=self.request.POST['razorpay_payment_id', False],
  File "C:\Users\kingmaker\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\utils\datastructures.py", line 85, in __getitem__
    raise MultiValueDictKeyError(repr(key))
django.utils.datastructures.MultiValueDictKeyError: "('razorpay_payment_id', False)"
打印打印(self.request.POST)给出


如何将付款id输入querydict?

表达式:

self.request.POST['razorpay_payment_id', False]
在这里没有多大意义。这意味着您要查询一个2元组
('razorpay\u payment\u id',False)
,但如果我理解正确,您只想使用
False
作为“回退”值


是的,关于“回退”值,您是对的。但是,razorpay_publishable_key是在settings.py中设置的一个API键,我不想要它,我想要razorpay_payment_id,它默认是按照这个发送的。@Abiragrazieee:如果我读对了,这意味着你不应该传递一个值,因为JavaScript部分会填充它。是的,它应该是,但显然不是。QueryDict仅包含@abicrazieeee:它不包含在标题或GET参数中?当我打印出handle_支付函数中的print(self.request.GET)时,QueryDict似乎为空
 <QueryDict: {'csrfmiddlewaretoken': ['jmeHeDEeNhaLM591S4113k1nNiXPLlPOT7eO47pqFyweLRw5al5ldrafTQmM9JPR'], 'action': ['place_order']}>
self.request.POST['razorpay_payment_id', False]
self.request.POST.get('razorpay_payment_id', False)
{{ razorpay_token_form }}
<input type="hidden" custom="Hidden Element" name="hidden">