creating django model for existing database/sql view?

Alexander Bird picture Alexander Bird · Feb 11, 2010 · Viewed 8.3k times · Source

I have inserted a definition for a view in $template_dir/sql/$someTableName.sql file. (create or replace view) so every time I run syncdb, the db views are created.

Can I create in models.py a python class which accesses that view?

Is it better practice to just use python's raw sql functionality instead?

---EDIT---

Another problem I have is that the view doesn't have a primary key, but django seems to be assuming there will be one because I get an error caught an exception while rendering: (1054, "Unknown column 'appName_currentleagues.id' in 'field list'") But I don't have such a member defined:

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

So my guess is that django reasonably sees that I don't define a primary key in the CurrentLeagues class, so Django assumes there's one called id. Is there a way to tell Django that there is no primary key (since this is actually a view), or is that not even my problem?

Answer

Will Hardy picture Will Hardy · Feb 11, 2010

See Unmanaged models

You define the model as usual and add managed = False to the meta options:

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