¿Cómo excluye la clave primaria del JSON producido por los datos de volcado de Django cuando las claves naturales están habilitadas?Exclusión de la clave principal en Django dumpdata con claves naturales
He creado un registro que me gustaría "exportar" para que otros puedan usarlo como plantilla, al cargarlo en bases de datos separadas con el mismo esquema sin entrar en conflicto con otros registros en el mismo modelo.
Según entiendo el soporte de Django para las claves naturales, esto parece ser lo que los NKs fueron diseñados para hacer. Mi registro tiene un campo único name
, que también se usa como clave natural.
Así que cuando corro:
from django.core import serializers
from myapp.models import MyModel
obj = MyModel.objects.get(id=123)
serializers.serialize('json', [obj], indent=4, use_natural_keys=True)
Yo esperaría un algo salida como:
[
{
"model": "myapp.mymodel",
"fields": {
"name": "foo",
"create_date": "2011-09-22 12:00:00",
"create_user": [
"someusername"
]
}
}
]
que luego pude cargar en otra base de datos, utilizando loaddata, esperando que se le asigna dinámicamente una nueva clave primaria. Tenga en cuenta que mi campo "create_user" es un modelo FK to auth.User de FK, que admite claves naturales, y que sale como su clave natural en lugar de la clave primaria entera.
Sin embargo, lo que genera es en realidad:
[
{
"pk": 123,
"model": "myapp.mymodel",
"fields": {
"name": "foo",
"create_date": "2011-09-22 12:00:00",
"create_user": [
"someusername"
]
}
}
]
cual claramente en conflicto con y sobrescribir cualquier registro existente con clave primaria 123.
¿Cuál es la mejor manera de solucionar este problema? No quiero cambiar retroactivamente todos los campos enteros de la clave primaria generados automáticamente a lo que sean las claves naturales equivalentes, ya que eso causaría un impacto en el rendimiento y requeriría mucha mano de obra.
Editar: Esto parece ser a bug que era hace reported ... hace 2 años ... y en gran medida ha sido ignorado ...
Esta es exactamente la solución que descubrí. – Cerin
Parece que puede omitir el campo 'pk' incluso en json ahora. – hop