BooleanField在BD中保留为0或1 ..如何获取值为()的数据列表,其中" 1" /" 0"而不是真/假
class Person(models.Model):
name = models.CharField()
male = models.BooleanField()
当我做:
print json.dumps(list(Person.objects.values()))
我有:[{"姓名":" Tom","男":true},{"姓名":&# 34;莉莎""男性":假}]
但我需要:{{"姓名":" Tom","男":" 1"},{& #34;名称":"莉莎""男性":" 0"}]
最好的方法是什么?
P.S。对不起我的英文
答案 0 :(得分:4)
解决方案-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
当您从db获取值时,这将为male
提供1/0
而不是True/False
的值
解决方案-2使用自定义json编码器:
来自docs,
使用自定义JSONEncoder子类(例如覆盖的子类)
default()
方法以序列化其他类型),使用cls
kwarg
解决方案-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)