2009-06-25 38 views
3

我看到了can i use a database view as a model in django這個問題,並在我的應用程序中嘗試了它,但那不起作用。在Django中使用數據庫視圖

我創建了一個名爲手動鑑於"vi\_topics"和它有"id"列,但我一直得到錯誤,即使我補充說:「id」字段明確地說

「沒有這樣的列:vi_topics.id」

這裏是名爲Vitopic在我的模型的定義:

from django.db import models 

class Vitopic(models.Model): 
    title = models.CharField(max_length=200) 
    content = models.TextField() 
    author_name = models.CharField(max_length=200) 
    author_email = models.CharField(max_length=200) 
    view_count = models.IntegerField(default=0) 
    replay_count = models.IntegerField(default=0) 
    tags = models.CharField(max_length=255) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    class Meta: 
     db_table = 'vi_topics' 

注意:我使用sqlite3。

回答

1

ID = models.IntegerField(primary_key =真)

3

試試這個: http://docs.djangoproject.com/en/dev/ref/models/options/#managed

管理

Options.managed

新在Django 1.1:請參見發行說明

默認爲True,含義Django將在syncdb中創建適當的數據庫表,並將它們作爲重置管理命令的一部分刪除。也就是說,Django管理數據庫表的生命週期。

如果爲False,則不會爲該模型執行數據庫表創建或刪除操作。如果模型表示已經通過其他方式創建的現有表或數據庫視圖,這很有用。這是管理爲False時唯一的區別。模型處理的所有其他方面與正常情況完全相同。這包括

  1. 如果您沒有聲明它,則將自動主鍵字段添加到模型中。爲避免以後的代碼閱讀器混淆,建議在使用非託管模型時指定要建模的數據庫表中的所有列。
  2. 如果managed = False的模型包含指向另一個非託管模型的ManyToManyField,則多對多連接的中間表也不會創建。但是,將創建一個託管模型和一個非託管模型之間的中間表。

    如果您需要更改此默認行爲,請將中間表創建爲顯式模型(根據需要使用託管集),並使用ManyToManyField.through屬性使關係使用您的自定義模型。

對於涉及managed = False的模型的測試,您需要確保將正確的表創建爲測試設置的一部分。

相關問題