我注意到当布尔数据从javascript发送到Django视图时,它被作为"true"/"false“(小写)而不是”True“/”False“(大写)传递。这会在我的应用程序中导致意外的行为。例如:
vote.js
....
var xhr = {
'isUpvote': isUpvote
};
$.post(location.href, xhr, function(data) {
doSomething()
});
return false;
});
views.py
def post(self, request, *args, **kwargs):
isUpvote = request.POST.get('isUpvote')
vote, created = Vote.objects.get_or_create(user_voted=user_voted)
vote.isUp = isUpvote
vote.save()
当我保存这个投票并检查我的Django管理页面时,"isUpvote“总是被设置为True,无论是从javascript传递的true还是false。那么,将javascript的"true/false“布尔值转换为Django的"True/False”值的最佳方法是什么呢?
谢谢!!
添加了:
好吧,我添加了一些'print‘行来检查我是否做错了什么:
print(vote.isUp)
vote.isUp = isUpvote
print(vote.isUp)
vote.save()
结果是:
True
false //lowercase
然后当我检查我的Django管理员时,它被保存为“True”!所以我猜这意味着出于某种奇怪的原因,将lowercaes "false“保存为Django的"True”值。
发布于 2013-08-12 11:26:48
尝尝这个。
from django.utils import simplejson
def post(self, request, *args, **kwargs):
isUpvote = simplejson.loads(request.POST.get('isUpvote'))
发布于 2015-07-13 20:40:00
也许让'isUpvote‘值作为字符串'true’或'false‘会更好,并使用json来区分它的布尔值
import json
isUpvote = json.loads(request.POST.get('isUpvote', 'false')) # python boolean
发布于 2014-04-29 15:47:57
我遇到了同样的问题( Javascript的True/False -Python需要的True/False),但我已经用一个小函数解决了它:
def convert_trueTrue_falseFalse(input):
if input.lower() == 'false':
return False
elif input.lower() == 'true':
return True
else:
raise ValueError("...")
它可能对某些人有用。
https://stackoverflow.com/questions/18178564
复制相似问题