【发布时间】:2015-10-22 18:59:26
【问题描述】:
使用 Postman https://www.getpostman.com/ 以 url 编码格式发送 POST 请求。它们在没有包含变量时通过,否则会遇到错误,例如:
对于整数参数:类型错误:int() 参数必须是字符串或数字,而不是“列表”
对于十进制参数:ValueError:从列表或元组创建十进制时元组大小无效。列表或元组应恰好包含三个元素。
对于带有变量的 django 模型:
grams = models.IntegerField(default=0)
amount_payable = models.DecimalField(max_digits = 5, decimal_places = 2)
并且关闭 CRSF。可能产生上述错误的帖子是:
POST /mypath/ HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cache-Control: no-cache
Postman-Token: 36eac051-d7e9-b106-effa-aa1fd557a42f
amount_payable=25.22&grams=450
然后在 Django 的调试页面中找到:
<django.db.models.manager.Manager object at 0x10c6d2110>
args ()
name 'create'
kwargs {u'amount_payable': [u'25.22'], u'grams': [u'450']}
看起来格式都很好,Django 解析有问题吗?已尝试使用其他模型和变量类型。 POST的格式/内容有问题吗?
这样查看代码:
def create_transaction(request):
this_transaction = Transaction.objects.create(**request.POST)
return HttpResponse('AOK')
【问题讨论】:
-
` {u'amount_payable': [u'25.22'], u'grams': [u'450']}` - 您的变量被包装在列表中,这会导致错误。您可以发布处理 POST 请求并填充模型的视图代码吗?
-
def create_transaction(request): this_transaction = Transaction.objects.create(**request.POST) return HttpResponse('AOK') 已在原帖底部添加更清晰的位置。