2016-03-10 23 views
1

我在閱讀關於認證的Django文檔之前首先創建了用戶模型,因此我將所有屬性放在同一模型中。所以,後來我試圖將它分成用戶和用戶配置文件。但是,當我運行人口腳本時,它說,即使我看到創建它的SQL,也找不到用戶配置文件表。即使我可以看到它創建,爲什麼我會得到「表未找到」?

這些是連接到我導入的用戶模型的兩個類。

from django.contrib.auth.models import User 

class UserProfile(models.Model): 
     user = models.OneToOneField(User) 
     profilepic = models.ImageField(blank=True) 
     city = models.ForeignKey(City) 
     slug = models.SlugField(unique=True) 

     def save(self, *args, **kwargs): 
      @property 
      def avg_rating(self): 
       return self.userrating_set.all().aggregate(Avg('rating'))['rating__avg'] 

    class UserRating(models.Model): 
     user = models.ForeignKey(User) 
     comment = models.CharField(max_length=500) 
     for_username = models.CharField(max_length=128) 
     rating = models.IntegerField(default=5) 

     def __unicode__(self): 
      return unicode(self.rating) 

這是人口腳本是哪裏的問題的一部分:

new_user = User.objects.get_or_create(username=username, email=email)[0] 
#new_user.profilepic = profile_picture 
new_user.firstname = first_name 
new_user.secondname = last_name 
new_user.save() 

new_user_profile = UserProfile.objects.get_or_create(user=new_user, city=created_city) 
new_user_profile.slug = username 
new_user_profile.save() 

這是運行腳本時出現錯誤:

Traceback (most recent call last): 
    File "C:\Users\bnbih\app_name\populationScript.py", line 108, in <module> 
    populate() 
    File "C:\Users\bnbih\app_name\populationScript.py", line 101, in populate 
    new_user_profile = UserProfile.objects.get_or_create() 
    File "C:\python27\lib\site-packages\django\db\models\manager.py", line 92, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "C:\python27\lib\site-packages\django\db\models\query.py", line 422, in get_or_create 
    return self.get(**lookup), False 
    File "C:\python27\lib\site-packages\django\db\models\query.py", line 351, in get 
    num = len(clone) 
    File "C:\python27\lib\site-packages\django\db\models\query.py", line 122, in __len__ 
    self._fetch_all() 
    File "C:\python27\lib\site-packages\django\db\models\query.py", line 966, in _fetch_all 
    self._result_cache = list(self.iterator()) 
    File "C:\python27\lib\site-packages\django\db\models\query.py", line 265, in iterator 
    for row in compiler.results_iter(): 
    File "C:\python27\lib\site-packages\django\db\models\sql\compiler.py", line 700, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "C:\python27\lib\site-packages\django\db\models\sql\compiler.py", line 786, in execute_sql 
    [Finished in 0.8s with exit code 1]cursor.execute(sql, params) 
    File "C:\python27\lib\site-packages\django\db\backends\utils.py", line 81, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "C:\python27\lib\site-packages\django\db\backends\utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\python27\lib\site-packages\django\db\utils.py", line 94, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "C:\python27\lib\site-packages\django\db\backends\utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\python27\lib\site-packages\django\db\backends\sqlite3\base.py", line 485, in execute 
    return Database.Cursor.execute(self, query, params) 
django.db.utils.OperationalError: no such table: mainapp_userprofile 
+1

你從哪裏看到「SQL創建它」?如果你運行'makemigrations' /'migrate',什麼都顯示出來了? – Sayse

+0

當我運行SQLmigrate時,可以看到:CREATE TABLE「mainapp_userprofile」 – Sei

回答

1

Django的sqlmigrate剛顯示你什麼將得到運行,它不適用任何更改,你需要運行migrate

打印指定遷移的SQL。這需要一個活動的數據庫連接,它將用它來解析約束名稱;這意味着您必須針對您希望稍後應用的數據庫副本生成SQL。

+0

@ Sei.M。 - 爲什麼你刪除了遷移?它的*從來沒有*一個好主意,只是刪除它們,你可能需要運行'migrate mainapp XXXX',其中'XXXX'是最新遷移的前綴號碼(可能是首先遷移mainapp 0或者只是刪除你的本地數據庫,重製它) – Sayse

+1

我刪除了數據庫,它現在工作。謝謝 – Sei

+1

@ Sei.M。如果這是正確的答案,您可以點擊複選標記來接受它。 – Selcuk

相關問題