2010-02-11 33 views
7

He insertado una definición para una vista en el archivo $ template_dir/sql/$ someTableName.sql. (crear o reemplazar vista) así que cada vez que ejecuto syncdb, se crean las vistas db.creando el modelo django para una base de datos existente/vista sql?

¿Puedo crear en models.py una clase python que acceda a esa vista?

¿Es mejor utilizar simplemente la funcionalidad raw sql de python?

--- --- EDITAR

Otro problema que tengo es que la vista no tiene una clave principal, pero Django parece estar asumiendo que habrá una porque me sale un error caught an exception while rendering: (1054, "Unknown column 'appName_currentleagues.id' in 'field list'") Pero Don 't tiene un miembro de tales definido:

Class CurrentLeagues(models.Model): 
     League = models.ForeignKey(League) 
     class Meta: 
       managed = False 

así que yo creo que Django razonablemente ve que no se define una clave primaria en la clase CurrentLeagues, así que Django asume que hay una que se llama id. ¿Hay alguna manera de decirle a Django que no hay una clave primaria (ya que esto es realmente una vista), o ese no es ni siquiera mi problema?

Respuesta

5

Ver Unmanaged models

Se define el modelo como de costumbre y agrega managed = False a las opciones de metadatos:

class MyModel(models.Model): 
    ... 
    class Meta: 
     managed = False 
+2

¿Pero cómo asocio esa clase de python con la vista de mysql con la que quiero que esté asociado? ¿Y necesito escribir explícitamente los miembros de "MyModel" correctamente para que coincida con la ortografía de los campos en la vista y simplemente funciona automáticamente de alguna manera? –

+0

Solo necesito deletrear la vista como 'appName_classname' porque esa es la ortografía que django usa automáticamente para cada instancia de Python Model. –

+1

Puede pasar manualmente el nombre de la vista utilizando la opción meta 'db_table': http://docs.djangoproject.com/en/dev/ref/models/options/#db-table. Sí, tendrá que escribir los nombres de los campos, de lo contrario, django no tendrá una versión de Python de sus modelos. Si desea reducir la cantidad de tipeo, podría emplear una intrincada red de modelos abstractos y herencia, pero lo mantendría lo más simple posible, incluso si eso significa una pequeña repetición. –

3

intenta utilizar pitón inspectdb manage.py o python manage.py inspectdb> models.py

+0

Bienvenido a Stack – qdot

Cuestiones relacionadas