如何将django Model对象转换为包含其所有字段的dict ?理想情况下,所有内容都包含外键和带有editable = False的字段.
让我详细说明一下.假设我有一个类似以下的django模型:
from django.db import models
class OtherModel(models.Model): pass
class SomeModel(models.Model):
normal_value = models.IntegerField()
readonly_value = models.IntegerField(editable=False)
auto_now_add = models.DateTimeField(auto_now_add=True)
foreign_key = models.ForeignKey(OtherModel, related_name="ref1")
many_to_many = models.ManyToManyField(OtherModel, related_name="ref2")
Run Code Online (Sandbox Code Playgroud)
在终端中,我做了以下事情:
other_model = OtherModel()
other_model.save()
instance = SomeModel()
instance.normal_value = 1
instance.readonly_value = 2
instance.foreign_key = other_model
instance.save()
instance.many_to_many.add(other_model)
instance.save()
Run Code Online (Sandbox Code Playgroud)
我想将其转换为以下字典:
{'auto_now_add': datetime.datetime(2015, 3, 16, 21, 34, 14, 926738, tzinfo=<UTC>),
'foreign_key': 1,
'id': 1,
'many_to_many': [1],
'normal_value': 1,
'readonly_value': 2}
Run Code Online (Sandbox Code Playgroud)
回答不满意的问题:
如果你是从谷歌来这里寻找模特到dict,请跳过我的问题,然后跳到第一个答案.我的问题只会让你感到困惑.
在Django中有一个很好的方法将整个Model的对象集合到一个字典中吗?我的意思是,像这样:
class DictModel(models.Model):
key = models.CharField(20)
value = models.CharField(200)
DictModel.objects.all().to_dict()
Run Code Online (Sandbox Code Playgroud)
...结果是一个字典,其键/值对由模型中的记录组成?还有其他人认为这对他们有用吗?
谢谢.
我想添加的
更新
是我的最终目标是能够在模板中进行简单的变量查找.就像是:
{{ DictModel.exampleKey }}
Run Code Online (Sandbox Code Playgroud)
使用DictModel.objects.get(key__exact = exampleKey).value的结果
总的来说,你们真的让我感到惊讶的是你的回答是多么有用,以及接近它的方式有多么不同.非常感谢.
更新2011年10月:
如果您使用Google"django model_to_dict",这个问题是最重要的结果,这实际上非常糟糕,因为它解决了与我提出的问题不同的问题.
我想要的是能够将查询集中的所有实例映射到具有指定模型字段作为键的单个字典中.
另一方面,model_to_dict将单个模型实例转换为字典.
现在,我当时的需求非常具体,可能非常罕见(我甚至不记得我需要它的项目,或者为什么).所以任何寻找有关model_to_dict信息的人都会发现我的问题确实很有用,我会感到非常惊讶.抱歉.
model_to_dict似乎是一个比我更常见的用例.
2011年12月更新:
我改变了标题,希望能更好地反映我原来的意图.