gpt4 book ai didi

Django model_to_dict 在转换模型时跳过所有 DateTimeField

转载 作者:行者123 更新时间:2023-12-04 00:17:43 43 4
gpt4 key购买 nike

我刚刚注意到 model_to_dict 的一个错误,它跳过模型中的所有 DateTimeField 并且从不将它们转换为字典,而使用 QuerySet 的 values() 函数则没有。我在互联网上查看,但找不到其他人有同样的问题。我只是想确认这确实是其他人遇到的问题,看看人们如何解决它。在这种情况下,每个人都避免使用 model_to_dict 并尝试使用 values() 模拟行为吗?或者有更好的解决方案吗?你怎么看?

谢谢!

下面是出处:

>>> member = Member.objects.get(id=1)
>>> member.create_time
datetime.datetime(2013, 2, 26, 6, 1, 2, tzinfo=<UTC>)
>>> model_to_dict(member)
{'verified': True, 'name': u'John', 'email': u'', 'phone': u'', 'id': 1L, 'password': u'4e3fc0574fbcdff16c8508339e', 'verify_token': u'5d98aacaba39eb7e'}

如您所见,“create_time”字段不在字典中。我不得不手动插入它:
>>> obj = model_to_dict(member)
>>> obj
{'verified': True, 'name': u'John', 'email': u'', 'phone': u'', 'id': 1L, 'password': u'4e3fc0574fbcdff16c8508339e', 'verify_token': u'5d98aacaba39eb7e'}
>>> obj["create_time"] = member.create_time
>>> obj
{'verified': True, 'name': u'John', 'email': u'', 'phone': u'', 'create_time': datetime.datetime(2013, 2, 26, 6, 1, 2, tzinfo=<UTC>), 'id': 1L, 'password': u'4e3fc0574fbcdff16c8508339e', 'verify_token': u'5d98aacaba39eb7e'}
>>>

编辑:

我想我发现了问题:在 model_to_dict() 中:
opts = instance._meta
for f in opts.fields:
if not f.editable:
continue

我的 create_time 字段显示为不可编辑。进一步的研究表明 auto_now_add=True 会自动使 editable=False。从而导致 model_to_dict() 跳过它......

最佳答案

我发现原因是 auto_now_add=True,它自动设置 editable=False,这导致 model_to_dict() 跳过字段

关于Django model_to_dict 在转换模型时跳过所有 DateTimeField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16080829/

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