python
  • django
  • 2011-06-01 50 views 3 likes 
    3

    嘿, 我已經創建了一個數據庫。用現在我已經更新用戶配置:Django不創建數據庫表

    class UserProfile(models.Model): 
        user = models.ForeignKey(User, unique = True, related_name = 'user') 
        follows = models.ManyToManyField("self", related_name = 'follows') <-- NEW LINE 
    

    所以python manage.py sqlall myapp返回我:

    [...] 
    CREATE TABLE "myapp_userprofile_follows" (
        "id" integer NOT NULL PRIMARY KEY, 
        "from_userprofile_id" integer NOT NULL, 
        "to_userprofile_id" integer NOT NULL, 
        UNIQUE ("from_userprofile_id", "to_userprofile_id") 
    ) 
    [...] 
    

    當我運行python manage.py syncdb

    Creating tables ... 
    Installing custom SQL ... 
    Installing indexes ... 
    No fixtures found. 
    

    但是,當我嘗試插入不創建表數據進入。爲什麼? (我在本地測試,使用sqlite3)

    +0

    見http://stackoverflow.com/a/27204663/847501 – Rafiq 2014-11-29 17:31:01

    回答

    5

    manage.py syncdb將不會修改現有表來添加或刪除字段。您將需要手動修改數據庫,或使用工具,如South創建自動化的數據庫遷移(這是我強烈建議)

    +0

    'ManyToManyField'應該創建一個NE w表,不添加或刪除列。即使有'ManyToManyField',我應該讓我們南? – 2011-06-01 22:55:28

    +1

    他也可以運行'manage.py reset myapp'來刪除表格並從新的數據開始。由於他添加了一個不需要的字段,我認爲他也可以運行dumpdata來獲取燈具,然後重置然後加載到燈具中。 – 2011-06-01 22:56:46

    +0

    @Fred,它的工作方式是'syncdb'查看項目中的模型,然後查看數據庫以查看該模型的表是否已經存在。如果是這樣,它假定關於該模型的所有內容都已經配置完畢,這意味着它甚至不會看到新的'ManyToManyField'。所以是的,即使添加'ManyToManyField'只會創建一個新表,您仍然需要使用South(或者自己修改數據庫)。 – 2011-06-01 23:00:05

    5

    你在settings.pys添加您的應用程序到INSTALLED_APPS:

    settings.py

    INSTALLED_APPS = (
        ... , 
        'my_app', 
    ) 
    

    https://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#installed-apps

    +0

    當然。這是一個功能的應用程序。 – 2011-06-01 22:54:24

    +0

    嗯,我想我應該明白這一點。很抱歉試圖幫助 – 2011-06-01 22:55:07

    +0

    沒問題的傢伙。不管怎樣,謝謝你。 – 2011-06-02 13:08:52

    相關問題