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 querysets (y no necesito preocuparme por tirar objetos de relaciones con 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).¿Cómo puedo hacer un accesorio de QuerySet en django?
Respuesta
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 escribir el data
en un archivo.
no estoy seguro de lo que entendemos por "las relaciones exteriores modelos", tal vez un ejemplo ayudarían, pero se pueden pasar dumpdata el modelo que le interesa ...
manage.py dumpdata --help
Usage: ./manage.py dumpdata [options] [appname appname.ModelName ...]
y ahí está el excluir interruptor:
-e EXCLUDE, --exclude=EXCLUDE
An appname or appname.ModelName to exclude (use
multiple --exclude to exclude multiple apps/models).
Solo quise decir que el vertido no necesita realizar un seguimiento de los modelos relacionados con el modelo que se está volcando. – pielgrzym
los siguientes pasos le ayudarán en la toma de la solución que proporciona soporte completo para crear un accesorio de varios QuerySets.
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 output.json
archivo. Para reconstruir los modelos a partir del archivo JSON:
from django.core import serializers
for obj in serializers.deserialize('json', open('output.json').read()):
obj.save()
EDITAR: Extrañamente, los sort_dependencies no funcionaron como se esperaba. Así que terminé usando python orderdict y decidí el pedido yo mismo.
import collections
app_list = collections.OrderedDict()
- 1. ¿Cómo puedo probar un queryset vacío en Django?
- 2. ¿Cómo pones un archivo en un accesorio en Django?
- 3. ¿Qué es un django QuerySet?
- 4. Django: filtro para get_foo_display en un Queryset
- 5. ¿Cómo hacer Django QuerySet mayor delete() más eficiente
- 6. cómo subconsultar en queryset en django?
- 7. ¿Cómo convierto un Django QuerySet en una lista de dictados?
- 8. cómo renderizar un Queryset en una plantilla de tabla-django
- 9. Orden Django QuerySet
- 10. Obtener el SQL de un Django QuerySet
- 11. Filtros de Django Custom Queryset
- 12. Filter Queryset en Django inlineformset_factory
- 13. Django filter on queryset intersection?
- 14. ¿Cómo obtener la siguiente fila en un queryset django?
- 15. Modificar queryset predeterminado en django
- 16. ¿Cómo hacer un filtro menor o igual que en Django queryset?
- 17. Django - Lista única de QuerySet
- 18. django - pidiendo queryset por un campo calculado
- 19. Comprobación de queryset vacío en Django
- 20. Django QuerySet filter + order_by + limit
- 21. impresión Django QuerySet SQL con ""
- 22. ¿Cómo hacer un DetailView en django 1.3?
- 23. Llamar a Django guardar en un objeto QuerySet - El objeto 'QuerySet' no tiene ningún atributo 'guardar'
- 24. Anulación queryset defecto en Django administrador
- 25. Cómo filtrar queryset en changelist_view en django admin?
- 26. Cómo convertir un QuerySet Django a una lista
- 27. búsqueda rápida para el último elemento en un Django QuerySet?
- 28. Cambiar un objeto QuerySet sobre la marcha en Django
- 29. En Django QuerySet, ¿cómo hago la negación en el filtro?
- 30. Cómo usar django annotate() y aggregate() para agrupar un queryset?
¡Excelente! ¡Muchas gracias! – pielgrzym