我正在尝试使用factoryboy JSONField
设置DjangoModelFactory
类型的字段。这是代码:
class SubmittedAnswer(models.Model):
data = JSONField(default={})
is_rule_check_passed = models.NullBooleanField()
class SubmittedAnswerFactory(DjangoModelFactory):
class Meta:
model = SubmittedAnswer
data = {"option_ids": [1]}
在数据库查询集响应中,我将data
字段设为Unicode
而不是dict
。
'data': u'{"option_ids":[3]}'}]
我错过了什么吗?
答案 0 :(得分:0)
我的猜测(根据您提供的输出格式)是您使用values(...)
执行查询。
使用QuerySet
时返回的values
将项目作为字典实例返回(每个键对应于模型的请求列)而不是模型实例(请参阅doc)。字典中的值对应于存储在数据库中的值,没有从数据到给定字段的复杂对象转换,因为没有模型的实例化。
如果您想直接获取模型实例,请使用常规QuerySet
,例如。
SubmittedAnswerFactory.objects.filter(...)
。如果您只想在执行实际SQL查询以进行优化时仅选择某些字段,并且仍然获取模型实例,请使用only
(或defer
)而不是values
(请参阅{{3 }})。
请参阅:
for a in SubmittedAnswer.objects.only('option_ids'):
print a.option_ids
>>> {'option_ids': [3]} # Dictionary object obtained by deserializing the data stored in the databse
...
与
for a in SubmittedAnswer.objects.values('option_ids'):
print a['option_ids']
>>> u'{"option_ids": [3]}' # unicode string as stored in database
...