Shu*_*ham 5 django django-testing factory-boy django-jsonfield
我正在尝试JSONField使用factoryboy 设置一个类型的字段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]}
Run Code Online (Sandbox Code Playgroud)
在数据库查询集响应中,我得到的data字段为as Unicode而不是as dict.
'data': u'{"option_ids":[3]}'}]
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我的猜测(基于您提供的输出的格式)是您使用 执行查询values(...)。
QuerySet使用时返回的返回项values作为字典实例(每个键对应于模型的请求列)而不是模型实例(请参阅文档)。字典中的值对应于数据库中存储的内容,没有从数据到给定字段的复杂对象转换,因为没有模型的实例化。
如果您想直接获取模型实例,请使用常规的QuerySet,例如。
SubmittedAnswerFactory.objects.filter(...)。如果您想在执行实际 SQL 查询时仅选择某些字段进行优化,并且仍然获取模型实例,请使用only(或defer) 而不是values(请参阅文档)。
看:
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
...
Run Code Online (Sandbox Code Playgroud)
相对
for a in SubmittedAnswer.objects.values('option_ids'):
print a['option_ids']
>>> u'{"option_ids": [3]}' # unicode string as stored in database
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
714 次 |
| 最近记录: |