2010-02-11 98 views
7

我在$ template_dir/sql/$ someTableName.sql文件中插入了一个视图的定义。 (创建或替换视图),所以每次运行syncdb时,都会创建数据库视图。为现有的数据库/ sql视图创建django模型?

我可以在models.py中创建一个访问该视图的python类吗?

更好的做法是使用python的原始sql功能代替吗?

---编辑---

我还有一个问题是,认为没有一个主键,但Django的似乎要假定会有一个,因为我得到一个错误caught an exception while rendering: (1054, "Unknown column 'appName_currentleagues.id' in 'field list'")但我不“T这样的成员定义:

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

所以我的猜测是,Django的合理看到,我没有定义在CurrentLeagues类主键,所以Django的假定有一个叫id。有没有办法告诉Django没有主键(因为这实际上是一个视图),或者甚至不是我的问题?

回答

5

Unmanaged models

您定义模型像往常一样,并添加managed = False到Meta选项:

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

但是,如何将python类与我希望它关联的mysql视图相关联?我是否需要正确地键入“MyModel”的成员来正确匹配视图中字段的拼写,并且它会自动以某种方式自动工作? – 2010-02-13 23:39:54

+0

我只需要将视图拼写为'appName_classname',因为这是django自动为每个python Model实例使用的拼写。 – 2010-02-13 23:51:53

+1

您可以使用'db_table'元选项手动传递视图的名称:http://docs.djangoproject.com/en/dev/ref/models/options/#db-table。是的,你需要输入字段名称,否则django将不会有你的模型的Python版本。如果你想减少键入的数量,你可以使用一个错综复杂的抽象模型和继承网络,但是我会尽可能地简单,即使它意味着一点点重复。 – 2010-02-14 01:46:19

3

尝试使用Python manage.py inspectdb或Python manage.py inspectdb> models.py

+0

欢迎使用堆栈 – qdot 2012-10-05 23:00:19