2014-02-12 23 views
0

我做這個教程tangowithdjango 5 Models and databasesDjango的 - 創建分類視圖不會創建列

在它要求營造的意見和喜歡與類別默認= 0柱練習。然後使用填充腳本用值更新它們。從現場

更新類型模型 直接報價中包括附加的屬性,觀點 ,喜歡這裏默認值是零。

所以我已經和models.py創建的類別

from django.db import models 
from django.template.defaultfilters import default 

# Create your models here. 
class Category(models.Model): 
    name = models.CharField(max_length=128, unique=True) 
    views = models.IntegerField(default=0) 
    likes = models.IntegerField(default=0) 

    class Meta: 
     verbose_name_plural = "Categories" 

    def __unicode__(self): 
     return self.name 

class Page(models.Model): 
    category = models.ForeignKey(Category) 
    title = models.CharField(max_length=128) 
    url = models.URLField() 
    views = models.IntegerField(default=0) 

然後我sync.db 但是這些列未創建從我的觀點得到這個錯誤。

Exception Type: DatabaseError at /admin/rango/category/ 
Exception Value: no such column: rango_category.views 

我是如何創建它們的?我是否必須刪除所有數據庫表並重新創建它們?

編輯Incorrect Duplicate的解決方案不能解決問題,以及我認爲的答案。刪除數據庫並重新同步不能解決創建羣體腳本的問題。

sql似乎沒問題我不確定什麼是錯的。

BEGIN; 
CREATE TABLE "rango_category" (
    "id" integer NOT NULL PRIMARY KEY, 
    "name" varchar(128) NOT NULL UNIQUE, 
    "views" integer NOT NULL, 
    "likes" integer NOT NULL 
) 
; 
CREATE TABLE "rango_page" (
    "id" integer NOT NULL PRIMARY KEY, 
    "category_id" integer NOT NULL REFERENCES "rango_category" ("id"), 
    "title" varchar(128) NOT NULL, 
    "url" varchar(200) NOT NULL, 
    "views" integer NOT NULL 
) 
; 

COMMIT; 
Finished "/home/sayth/workspace/tango_project/manage.py sql rango" execution. 

即使重新刪除數據庫和重新設計和重新創建模型也沒有解決。

BEGIN; 
CREATE TABLE "rango_category" (
    "id" integer NOT NULL PRIMARY KEY, 
    "name" varchar(128) NOT NULL UNIQUE 
) 
; 
CREATE TABLE "rango_page" (
    "id" integer NOT NULL PRIMARY KEY, 
    "category_id" integer NOT NULL REFERENCES "rango_category" ("id"), 
    "title" varchar(128) NOT NULL, 
    "url" varchar(200) NOT NULL, 
    "views" integer NOT NULL, 
    "likes" integer NOT NULL 
) 
; 

COMMIT; 
Finished "/home/sayth/workspace/tango_project/manage.py sql rango" execution. 
+0

可能重複http://stackoverflow.com/questions/7323659/databaseerror-no-such-column-error – laike9m

+0

@ laike9m我希望你發佈的可能答案可以解決它,就像我發佈的答案,但可惜它沒有。 – sayth

+0

你嘗試過'南'嗎? – laike9m

回答

1

啊是的,我忽略了文檔中的警告。

警告無論何時添加到現有的數據庫模型,你將不得不 刪除數據庫文件,然後通過再次運行 蟒蛇manage.py SYNCB重新同步數據庫。這是Django 1.5.4的一個缺點,而 可能相當令人沮喪。如果你添加一個新的模型,你可以 syncdb你的數據庫,而不必刪除並重新創建它。因此,您在調整數據庫時必須記住這一點:新的 模型將與syncdb同步 - 但對現有的 模型的更改不會。當嚮應用程序的 models.py文件添加新模型時,只需運行以下命令即可 將數據庫與命令$ python manage.py syncdb同步。 將現有模型更新到應用程序的models.py文件 時,必須執行以下步驟。刪除數據庫。使用$ python manage.py syncdb命令重新創建 數據庫。用數據填充 新數據庫。從 刪除並重新創建數據庫是一個令人沮喪的過程。對此問題 的一個可能的解決方案可能是使用像South這樣的第三方應用程序來處理數據庫模式遷移(對模型的更改) 。 South目前正在積極開發 ,並被認爲是用於Django模式遷移的標準解決方案 ,直到該功能成爲標準Django代碼庫的 的一部分。我們在這裏沒有涉及南方 - 但如果您對 感興趣,南方官方文檔提供了一個方便的教程。如果您不想使用South,我們將在第5.8節討論 中的一項技術,以加快更新過程。您可能也有 注意到我們的類別模型目前缺少一些 我們在Rango的要求中定義的字段。我們將在稍後將這些添加到 中提醒您更新過程。

而且它似乎在django 1.7之前的核心遷移將不可用。

我錯誤地更新了它應該看起來像的填充腳本。

def add_page(cat, title, url, views=0): 
    p = Page.objects.get_or_create(category=cat, title=title, url=url, views=views)[0] 
    return p 

def add_cat(name, views=0, likes=0): 
    c = Category.objects.get_or_create(name=name, views=views, likes=likes)[0] 
    return c 

看到

https://stackoverflow.com/a/19759473/461887

django migrations

+1

現在用南,大家都會。 (或者在這種情況下,您可以刪除數據庫文件並重新制作它,因爲我懷疑您有需要保存的數據)。我聽說過有關tangowithdjango的好消息,但是我覺得他們沒有詳細解釋South,因爲它非常重要。 (直到1.7) – ptr