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?
In order to use an existing database in Django, you need to have a model for each table. Creating models for existing tables manually is just too much work. However, there's no need to do that, since Django has a builtin tool to solve this exact problem.
Django inspectdb command Django provides a utility to auto-generate models from an existing database via inspectdb command.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With