一尘不染

Django:将模型对象的整个集合转换为单个字典

django

如果你是从Google来这里寻找模型的人,请跳过我的问题,然后跳到第一个答案。我的问题只会使你感到困惑。

在Django中,有没有一种很好的方法可以将整个模型对象集合到一个字典中?我的意思是,像这样:

class DictModel(models.Model):
    key = models.CharField(20)
    value = models.CharField(200)

DictModel.objects.all().to_dict()

…结果是字典,键/值对由模型中的记录组成?还有其他人认为这对他们有用吗?

谢谢。 我只想添加的

更新
是,我的最终目标是能够在模板内进行简单的变量查找。就像是:

{{ DictModel.exampleKey }}

结果为DictModel.objects.get(key__exact = exampleKey).value

总体而言,你们对你的所有回复都非常有帮助,并且处理方式有多么不同,真的让我感到惊讶。非常感谢。

如果你使用的是Google的“ django model_to_dict”,那么此问题是最高的结果,考虑到它解决了与我所要求的问题不同的问题,因此这实际上非常糟糕。

我想要的是能够将查询集中的所有实例映射到具有指定模型字段作为键的单个字典中。
另一方面,model_to_dict将单个模型实例转换为字典。

现在,我当时的需求相当具体,并且可能极为罕见(我什至不记得我需要它的项目,或者为什么)。因此,如果任何人寻找有关model_to_dict的信息都会发现我的问题真正有用,我会感到非常惊讶。抱歉。

model_to_dict似乎是比我更常用的用法。


阅读 414

收藏
2020-03-30

共2个答案

一尘不染

这需要创建一个实际的字典吗?你能只看似字典的内容吗?

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):
        ...

然后,你可以通过以下方式包装模型:

modelDict = DictModelAdaptor(DictModel)
modelDict["name"] = "Bob Jones"
2020-03-30
一尘不染

你还可以依靠已经编写的django代码;)。

from django.forms.models import model_to_dict
model_to_dict(instance, fields=[], exclude=[])
2020-03-30