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=[])
쿼리에서 사전 목록을 가져올 수있는 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'}]
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
'Programing' 카테고리의 다른 글
Android 데이터베이스 커서보기 (0) | 2020.12.06 |
---|---|
iTunes Connect 용 iOS 시뮬레이터 스크린 샷 "잘못된 크기" (0) | 2020.12.06 |
AngularJS. (0) | 2020.12.06 |
짧은 rot13 함수-Python (0) | 2020.12.06 |
사용자 정의 어셈블리 속성 (0) | 2020.12.05 |