2012-04-27 48 views
3

我想重置我的Django項目的數據庫中的表,所以我做了以下步驟:的Django南不創造user_profiles

  1. 刪除了我的SQLite數據庫
  2. 難道python manage.py syncdb
  3. 難道python manage.py migrate users --fake

創建新帳戶並登錄後,我收到以下錯誤消息:

no such table: users_userprofile 

這裏是model.py長什麼樣我的用戶喜歡:

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    joined_goals = models.ManyToManyField(Goal, related_name="joined_goals") 
    followingGoals = models.ManyToManyField(Goal, related_name="following_goals") 

    def __unicode__(self): 
    return self.user.username 

    def get_goals(self): 
    try: 
     goals = Goal.objects.filter(user=self.user) 
     return goals 
    except Goal.DoesNotExist: 
     return [] 

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     userProfile = UserProfile.objects.create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

所以,有一個用戶配置類,但南似乎並沒有使表來保存用戶配置文件。當我做python manage.py schemamigration users --auto時,它說什麼都沒有改變。我如何獲得它來創建userprofiles表?

+1

爲什麼你使用''--fake''?這實際上並沒有進行遷移...... – jterrace 2012-04-27 04:41:20

+0

備註:您的get_goals函數永遠不會引發DoesNotExist異常。如果沒有匹配的目標,您只會得到一個空的查詢集。 – sdolan 2012-04-27 04:48:24

+0

你運行過'./manage.py convert_to_south users'嗎?在嘗試生成模式遷移之前,您可能需要執行此操作 – akhaku 2012-04-27 05:30:44

回答

6

我有這個完全相同的問題。結果發現,使用South時存在循環依賴。爲了解決這個問題,不要創建一個超級用戶,當您運行執行syncdb,而是運行:

python manage.py createsuperuser 

創建了具有執行syncdb的數據庫之後。此時,您的配置文件表將被創建,post_save信號將成功。

0

嘗試遷移沒有--fake選項的表。如果您在數據庫中應用了更改,但假如您在south_migrationhistory表中沒有更改,那麼僞造就是有用的。

+0

我在嘗試遷移用戶時遇到此問題:爲用戶運行遷移: - 無法遷移。 - 爲用戶加載初始數據。 找不到燈具。 – egidra 2012-04-30 02:38:48

0

下應該對某些人的工作:

python manage.py schemamigration myapp --initial 
python manage.py migrate myapp