Programing

Django : 모델 객체의 전체 집합을 단일 사전으로 변환

lottogame 2020. 12. 6. 20:49
반응형

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의 결과

하지만 전반적으로 여러분은 여러분의 모든 답변이 얼마나 도움이되는지, 접근 방법이 얼마나 다른지에 대해 정말 놀랐습니다. 감사합니다.

2011 년 10 월 업데이트 : 이 질문은 Google "django model_to_dict"를 검색하는 경우 최고 결과입니다. 제가 요청한 것과 다른 문제를 해결한다는 점을 감안할 때 실제로 매우 끔찍합니다.

내가 원했던 것은 쿼리 세트의 모든 인스턴스를 지정된 모델 필드를 키로 사용하여 단일 사전에 매핑 할 수있는 것이 었습니다.
반면에 model_to_dict는 단일 모델 인스턴스를 사전으로 변환합니다.

지금은 그 당시의 요구 사항이 매우 구체적이었고 아마도 극히 드물었을 것입니다 (내가 필요했던 프로젝트 나 그 이유조차 기억할 수 없습니다). 따라서 model_to_dict에 대한 정보를 찾는 사람이 내 질문이 실제로 유용하다는 것을 알게 될 것입니다. 죄송합니다.

model_to_dict는 내가 가진 것보다 훨씬 더 일반적인 사용 사례 인 것 같습니다.

2011 년 12 월 업데이트 :
원래 의도를 더 잘 반영하도록 제목을 변경했습니다.


실제 사전을 만들어야합니까? 딕셔너리처럼 보이는 것만 가지고 지나갈 수 있습니까?

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"

기타...


이미 작성된 django 코드를 사용할 수도 있습니다.).

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

쿼리에서 사전 목록을 가져올 수있는 QuerySetValues ​​멤버를 찾고 있습니다.

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'}]

in_bulk문서에 따라 다음과 같은 queryset 메서드를 원합니다 .

기본 키 값 목록을 가져와 각 기본 키 값을 지정된 ID를 가진 개체의 인스턴스에 매핑하는 사전을 반환합니다.

ID 목록이 필요하므로 먼저 values_list메소드 를 통해 가져와야합니다 .

ids = MyModel.objects.values_list('id', flat=True)
model_dict = MyModel.objects.in_bulk(ids)

python serializer 를 사용할 수 있습니다 .

from django.core import serializers
data = serializers.serialize('python', DictModel.objects.all())

dict((x.name, getattr(o, x.name)) for x in o._meta.fields)


사용하다

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

Tom Leys가 제안한대로 전체 객체를 가져올 필요는 없습니다. 필요한 값만 가져올 수 있습니다.

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

모든 값이 필요한 경우 전체 객체를 dict에 유지하는 것이 좋습니다.

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

Perhaps I'm missing something, but Django objects have a __dict__ attribute which seems be what you want.


Or were you trying to do something like:

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)

To get a map of all of the instances in a queryset into a single dictionary with a specified model field as the key, try doing this

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

To get values of a models into dictionary, add below code at the place where u need that dictionary

from models import DictModel

activity_map = dict(Plan.objects.values_list('key', 'value'))

activity_map is a dictionary which contains required information .


user = mymodel.objects.all()
user.values() 

You can also try

user.values_list() # getting as list

참고URL : https://stackoverflow.com/questions/1123337/django-converting-an-entire-set-of-a-models-objects-into-a-single-dictionary

반응형