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