variable template ifequal python django django-models workflow django-syncdb

python - ifequal - django template variable



Flujo de trabajo de Django al modificar modelos con frecuencia? (6)

El sur es el más fresco.

Aunque un buen reinicio funciona mejor cuando los datos no importan.

http://south.aeracode.org/

como generalmente no hago el diseño inicial de mis modelos en los proyectos de Django, termino modificando mucho los modelos y, por lo tanto, borrando la base de datos de prueba todo el tiempo (porque "syncdb" nunca alterará las tablas automáticamente). A continuación se encuentra mi flujo de trabajo y me gustaría saber sobre el tuyo. Cualquier pensamiento bienvenido ..

  1. Modificar el modelo.
  2. Eliminar la base de datos de prueba. (siempre una base de datos sqlite simple para mí)
  3. Ejecute "syncdb".
  4. Genera algunos datos de prueba a través del código.
  5. Ir a 1.

Una pregunta secundaria con respecto a esto ... En caso de que su flujo de trabajo sea como el de arriba, ¿cómo ejecuta el 4. paso? ¿Generas los datos de prueba manualmente o hay un punto de enlace apropiado en las aplicaciones de Django donde puedes inyectar el código de generación de datos de prueba al inicio del servidor?

TIA.


Este es un trabajo para los accesorios de Django. Son convenientes porque son independientes de la base de datos y el arnés de prueba (y manage.py) tienen soporte integrado para ellos.

Para usarlos:

  1. Configure sus datos en su aplicación (llámalo "foo") usando la herramienta de administración
  2. Crea un directorio de accesorios en tu directorio de aplicaciones "foo"
  3. Tipo: python manage.py dumpdata --indent=4 foo > foo/fixtures/foo.json

Ahora, después de su etapa syncdb, simplemente escriba:

python manage.py loaddata foo.json

Y sus datos serán recreados.

Si los quiere en un caso de prueba:

class FooTests(TestCase): fixtures = [''foo.json'']

Tenga en cuenta que tendrá que volver a crear o actualizar manualmente sus dispositivos si su esquema cambia drásticamente.

Puede leer más sobre los accesorios en los documentos django para Fixture Loading


Esto es lo que hacemos.

  1. Las aplicaciones se nombran con un número de versión de esquema. appa_2 , appb_1 , etc.

  2. Los cambios menores no cambian el número.

  3. Los cambios importantes incrementan el número. Syncdb funciona. Y se puede escribir un script de "migración de datos".

    def migrate_appa_2_to_3(): for a in appa_2.SomeThing.objects.all(): appa_3.AnotherThing.create( a.this, a.that ) appa_3.NewThing.create( a.another, a.yetAnother ) for b in ...

El punto es que soltar y recrear no siempre es apropiado. A veces es útil mover datos del modelo anterior al nuevo modelo sin reconstruir desde cero.


Los pasos 2 y 3 se pueden hacer en un solo paso:

manage.py reset appname

El paso 4 es más fácil de manejar, desde mi entendimiento, mediante el uso de fixtures


Para agregar a la respuesta de Matthew, a menudo también uso SQL personalizado para proporcionar datos iniciales como se documenta here .

Django solo busca archivos en <app>/sql/<modelname>.sql y los ejecuta después de crear tablas durante syncdb o sqlreset . Uso SQL personalizado cuando necesito hacer algo como llenar mis tablas Django desde otras tablas de bases de datos que no sean de Django.


Personalmente mi DB de desarrollo es para un proyecto en el que estoy trabajando actualmente es bastante grande, así que uso dmigrations para crear scripts de migración db para modificar el db (en lugar de eliminar el db cada vez como lo hice al principio).

Editar: En realidad, estoy usando el sur ahora :-)