Django: преобразование всего набора объектов модели в один словарь - PullRequest
59 голосов
/ 14 июля 2009

Если вы пришли сюда из 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

В целом, вы, ребята, действительно удивили меня тем, насколько полезны все ваши ответы и насколько разными могут быть подходы к нему. Большое спасибо.

Обновление за октябрь 2011 года: Этот вопрос является лучшим результатом, если вы Google "django model_to_dict", что на самом деле довольно ужасно, учитывая, что оно решает проблему, отличную от того, что я просил.

Я хотел иметь возможность отобразить все экземпляры в наборе запросов в один словарь с указанным полем модели в качестве ключа.
С другой стороны, model_to_dict преобразует один экземпляр модели в словарь.

Теперь мои потребности в то время были чертовски специфичны и, вероятно, чрезвычайно редки (я даже не могу вспомнить проект, для которого я нуждался, или почему). Поэтому я был бы очень удивлен, что любой, кто ищет информацию о model_to_dict, найдет мой вопрос действительно полезным. Извините.

model_to_dict, похоже, гораздо более распространенный случай использования, чем я.

Обновление в декабре 2011 года:
Я изменил название, чтобы, надеюсь, лучше отражать мои первоначальные намерения.

Ответы [ 12 ]

2 голосов
/ 02 июня 2012

Чтобы получить карту всех экземпляров в наборе запросов в один словарь с указанным полем модели в качестве ключа, попробуйте сделать это

from django.forms.models import model_to_dict
from myApp.models import myModel

allObjs = myModel.objects.all()
f = {}         # initialise the output
key = 'key'    # one of the fields from myModel

[f.update({x[key]: x}) for x in [model_to_dict(y) for y in allObjs]]
return f
2 голосов
/ 16 марта 2010

Или вы пытались сделать что-то вроде:

def someview(req):
    models = MyModel.objects.all()
    toTuple = lambda field: (getattr(field, 'someatt'), getattr(field, 'someotheratt'))  
    data = dict(map(toTuple,models))
    return render_to_response(template, data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...