Lar*_*ikJ 59 python django dictionary django-models
如果你是从谷歌来这里寻找模特到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月更新:
我改变了标题,希望能更好地反映我原来的意图.
Art*_*ert 213
你也可以依赖已经写过的django代码;).
from django.forms.models import model_to_dict
model_to_dict(instance, fields=[], exclude=[])
Run Code Online (Sandbox Code Playgroud)
Tom*_*eys 27
您正在寻找QuerySet的Values成员,它允许您从查询中获取字典列表
返回ValuesQuerySet - 一个QuerySet,其值为字典列表而不是模型实例对象.每个字典代表一个对象,其中的键对应于模型对象的属性名称.
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
Run Code Online (Sandbox Code Playgroud)
Sin*_*ion 17
这需要创建一个真正的字典吗?你能不能只看到像dict的东西?
class DictModelAdaptor():
def __init__(self, model):
self.model = model
def __getitem__(self, key):
return self.model.objects.get(key=key)
def __setitem__(self, key, item):
pair = self.model()
pair.key = key
pair.value = item
pair.save()
def __contains__(self, key):
...
Run Code Online (Sandbox Code Playgroud)
然后你可以用这种方式包装模型:
modelDict = DictModelAdaptor(DictModel)
modelDict["name"] = "Bob Jones"
Run Code Online (Sandbox Code Playgroud)
等等...
Dan*_*man 16
in_bulk根据文档,您需要queryset方法:
获取主键值列表并返回将每个主键值映射到具有给定ID的对象实例的字典.
它需要一个ID列表,因此您需要首先通过该values_list方法获取:
ids = MyModel.objects.values_list('id', flat=True)
model_dict = MyModel.objects.in_bulk(ids)
Run Code Online (Sandbox Code Playgroud)
Lup*_*uch 14
您可以使用python 序列化器:
from django.core import serializers
data = serializers.serialize('python', DictModel.objects.all())
Run Code Online (Sandbox Code Playgroud)
使用
dict(((m.key, m.value) for m in DictModel.objects.all())
Run Code Online (Sandbox Code Playgroud)
正如Tom Leys所建议的那样,我们不需要获得整个对象,我们只能获得我们需要的那些值
dict(((m['key'], m['value']) for m in DictModel.objects.values('key', 'value')))
Run Code Online (Sandbox Code Playgroud)
如果你需要所有的值,最好将整个对象保存在dict中,例如
dict(((m.key, m) for m in DictModel.objects.all())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42880 次 |
| 最近记录: |