gpt4 book ai didi

python - Django model.BooleanField 值为 0/1

转载 作者:太空宇宙 更新时间:2023-11-04 10:19:42 34 4
gpt4 key购买 nike

当我使用 获取 BooleanField 时,我需要接收一个字符串值('0''1') >query.values()例如,如果使用下一个模型:

class Person(models.Model):
name = models.CharField()
male = models.BooleanField()

然后做:

print json.dumps(list(Person.objects.values()))

我会收到这个:[{"name":"Tom","male":true},{"name":"Lisa","male":false}]

但我需要这样:[{"name":"Tom","male":"1"},{"name":"Lisa","male":"0"}]

最好的方法是什么?

最佳答案

解决方案 1 使用 CustomBooleanField:

您可以子类化 BooleanField 并添加一个函数 from_db_value它将 True/False 的值返回为 1/0

class CustomBooleanField(models.BooleanField):

def from_db_value(self, value, expression, connection, context):
if value is None:
return value
return int(value) # return 0/1

然后在您的模型中,您可以将此自定义字段用于 male

class Person(models.Model):
name = models.CharField()
male = CustomBooleanField() # use the custom field

当您从数据库中获取值时,这将为您提供 male 的值作为 1/0 而不是 True/False

Solution-2 使用自定义 json 编码器:

来自docs,

To use a custom JSONEncoder subclass (e.g. one that overrides the default() method to serialize additional types), specify it with the cls kwarg

Solution-3 使用列表理解:

另一种选择是使用 list comprehensions.

要将 True/False 转换为 1/0,我们将使用 int(some_boolean_value)

objects_list =  list(Person.objects.values())
modified_list = [{"name":x["name"], "male": int(x["male"])} for x in objects_list] # use list comprehension
json.dumps(modified_list)

关于python - Django model.BooleanField 值为 0/1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021461/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com