2012-07-20 6 views
9

Django dumpdata 명령은 덤프 된 데이터의 양을 제한하는 합리적인 방법을 지원하지 않으므로 손상되었습니다. 다양한 쿼리 세트의 픽처를 만들 필요가 있습니다 (그리고 저는 외부 모델 관계로부터 객체를 덤프 할 필요가 없습니다). django-test-utils makefixture가하는 것처럼 그러한 쿼리 세트의 항목 수를 제한하는 것만으로는 충분하지 않습니다. 사용자 정의 관리자와 함께 프록시 모델을 사용하여이 작업을 시도했지만이 방법은 작동하지 않습니다. - dumpdata는 프록시 모델을 사용하지 않습니다 (이는 합리적입니다).django의 QuerySet에서 조명기를 어떻게 만들 수 있습니까?

답변

28

dumpdata이 작동하지 않는 경우 Django Serializing data을 통해 동일한 작업을 수행 할 수 있습니다.

from django.core import serializers 
data = serializers.serialize("json", SomeModel.objects.all()) 

다음으로 파일에 data을 작성하십시오.

+2

우수! 고마워요! – pielgrzym

-1

나는 당신이 "외부 모델의 관계", 어쩌면 예를 들어 도움이 될 무슨 뜻인지 잘 모르겠지만, 당신은 당신이 ...

manage.py dumpdata --help 
Usage: ./manage.py dumpdata [options] [appname appname.ModelName ...] 

관심있는 모델 dumpdata 통과 할 수 있고, 거기에 스위치를 제외 :

-e EXCLUDE, --exclude=EXCLUDE 
        An appname or appname.ModelName to exclude (use 
        multiple --exclude to exclude multiple apps/models). 
+0

방금 ​​덤핑 모델이 덤프되는 것과 관련된 모델을 추적 할 필요가 없다는 것을 의미했습니다. – pielgrzym

1

다음 단계는 다양한 검색어 세트의 고정을 만들 에 대한 해결책 완전한 제공하는 지원을 만드는 데 도움이 될 것입니다.

from django.core import serializers 
from django.core.management.commands.dumpdata import sort_dependencies 

app_list = {} 

# Add all your querysets here. The key for the dictionary can be just a 
# unique dummy string (A safe hack after reading django code) 
app_list['app1_name'] = FirstModel.objects.all() 
app_list['app2_name'] = SecondModel.objects.all() 

# The sort_dependencies will ensure that the models are sorted so that 
# those with foreign keys are taken care. If SecondModel has a fk to FirstModel, 
# then sort_dependencies will take care of the ordering in the json file so that 
# FirstModel comes first in the fixture thus preventing ambiguity when reloading 
data = serializers.serialize("json", sort_dependencies(app_list.items())) 
f = open('output.json', 'w') 
f.write(data) 
f.close() 

출력은 output.json 파일로 제공됩니다. JSON 파일에서 모델을 다시 만들려면 :

from django.core import serializers 

for obj in serializers.deserialize('json', open('output.json').read()): 
    obj.save() 

편집 : 예상대로 이상하게 sort_dependencies가 작동하지 않았다. 그래서 파이썬 명령을 사용하여 결국 주문을 결정했습니다.

import collections 

app_list = collections.OrderedDict() 
관련 문제