2010-02-11 91 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