2011-05-23 64 views
2

我有一個配置文件模型用於從auth應用程序爲用戶定義配置文件。此外,我有一個信號,每次創建用戶時都會創建一個空白配置文件。Django:在syncdb上強制創建表創建訂單

問題是,從clean開始,在User表後面創建Profile表,因此,當我被要求添加超級用戶時,我的信號函數失敗,因爲沒有Profile表進入空剖面。

有沒有辦法強制syncdb創建表的順序,以便在添加超級用戶時應該已經創建了配置文件表?

回答

4

執行下列操作之一:

  1. 修改你的信號捕獲此特定錯誤(表不存在),並忽略它。如果您需要擁有超級用戶的配置文件,也無濟於事。

  2. 在整個數據庫模式初始化之前不要插入任何數據。您不必在syncdb期間創建超級用戶,這可以稍後從開發控制檯(django-admin.py shell)完成,或者您可以將超級用戶的用戶和配置文件添加到在syncdb期間自動加載的應用程序的initial_data.json燈具。這將重置它的歷史信息,但在某些情況下,這是可以接受的。

  3. 使用AutoOneToOneField from django-annoying lib在第一次訪問時自動創建配置文件。這就是我自己解決這個問題的方式 - 不需要用信號來重做現有的功能。下面是他們的一個維基例子:

    from annoying.fields import AutoOneToOneField 
    
    class MyProfile(models.Model): 
        user = AutoOneToOneField(User, primary_key=True) 
    
+0

謝謝您的回答。我相信我會選擇第二個選項:我將使用./manage.py createsuperuser創建後者 – 2011-05-23 21:39:58

+0

投票選擇解決方案3,對我來說是最乾淨的。易於安裝和工作正常 – 2013-06-15 08:15:10

1

在其中創建表的順序取決於你有他們在你的INSTALLED_APPS的順序

嘗試用配置文件移動django.contrib.auth

以上您的應用程序除非你使用一個數據庫與外鍵檢查,在這種情況下,用戶表可能需要首先。

+0

謝謝您的回答。您指出了一個好處:用戶配置文件在用戶上有一個外鍵,所以我有義務首先創建用戶表 – 2011-05-23 21:38:12