queryset query cual consultas avanzadas django django-models django-fixtures

query - group by django



¿Cómo puedo hacer un accesorio de QuerySet en django? (3)

El comando Django dumpdata está roto porque no admite ninguna forma razonable de reducir la cantidad de datos volcados. Necesito crear un accesorio de varios conjuntos de consultas (y no necesito preocuparme por eliminar objetos de las relaciones de modelos externos). Limitar el número de elementos para esos conjuntos de consultas, como django-test-utils makefixture no es suficiente. Intenté lograr esto utilizando un modelo proxy con administrador personalizado, pero este enfoque no funciona: dumpdata omite los modelos proxy (lo cual es razonable).


No estoy seguro de lo que quiere decir con "relaciones de modelos externos", tal vez un ejemplo ayude, pero puede pasar dumpdata al modelo que le interesa ...

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

y está el interruptor de exclusión:

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


Si dumpdata no funciona, puede hacer lo mismo a través de Django Serializing data .

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

y luego escribe los data en un archivo.


Los siguientes pasos ayudarán a completar la solución, proporcionando soporte para crear un accesorio de varios conjuntos de consultas .

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()

Ahora la salida estará disponible en el archivo output.json . Para reconstruir los modelos del archivo json:

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

EDITAR : Extrañamente, sort_dependencies no funcionó como se esperaba. Así que terminé usando python orderdict y decidí el pedido yo mismo.

import collections app_list = collections.OrderedDict()