Django: Преобразование всего набора объектов Модели в единственный словарь

int[] terms = new int[400];

for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}
59
задан LarrikJ 9 December 2011 в 18:29
поделиться

8 ответов

Нужно ли создавать настоящий диктант? могли бы вы обойтись только чем-то похожим на диктатор?

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"

и т. д.

17
ответ дан 24 November 2019 в 17:55
поделиться

Вы ищете член Values ​​в QuerySet , который позволяет вам получить список словарей из вашего запроса

Возвращает 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'}]
27
ответ дан 24 November 2019 в 17:55
поделиться

использование

dict(((m.key, m.value) for m in DictModel.objects.all())

Как было предложено Томом Лейсом, нам не нужно получать весь объект, мы можем получить только те значения, которые нам нужны, например

dict(((m['key'], m['value']) for m in DictModel.objects.values('key', 'value')))

, и если вам нужно все значения, лучше сохранить весь объект в dict, например,

dict(((m.key, m) for m in DictModel.objects.all())
5
ответ дан 24 November 2019 в 17:55
поделиться

You want the in_bulk queryset method which, according to the docs:

Takes a list of primary-key values and returns a dictionary mapping each primary-key value to an instance of the object with the given ID.

It takes a list of IDs, so you'll need to get that first via the values_list method:

ids = MyModel.objects.values_list('id', flat=True)
model_dict = MyModel.objects.in_bulk(ids)
16
ответ дан 24 November 2019 в 17:55
поделиться

Вы можете использовать сериализатор python :

from django.core import serializers
data = serializers.serialize('python', DictModel.objects.all())
14
ответ дан 24 November 2019 в 17:55
поделиться

Вы также можете положиться на уже написанный код django;).

from django.forms.models import model_to_dict
model_to_dict(instance, fields=[], exclude=[])
213
ответ дан 24 November 2019 в 17:55
поделиться

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

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)
2
ответ дан 24 November 2019 в 17:55
поделиться

dict ((x.name, getattr (o, x.name)) для x в o._meta.fields)

6
ответ дан 24 November 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: