环境DJANGO VERSION 1.9 Python 2.7.6
我在models.py这样的模型类中添加了一个字段(分数)
from django.db import models
from django.contrib.auth.models import User
import urllib
import hashlib
class profile(models.Model):
user = models.OneToOneField(User)
nickname = models.CharField(max_length=12, blank=True, null=True)
use_gravatar = models.BooleanField(default=True)
location = models.CharField(max_length=20, blank=True, null=True)
avatar_url = models.URLField(blank=True, null=True)
website = models.URLField(blank=True, null=True)
**scores = models.IntegerField(default = 0)**
Run Code Online (Sandbox Code Playgroud)
我运行以下命令来同步数据库.
python manage.py makemigrations
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
但得到了这个
OperationalError at /
no such column: account_profile.scores
Request Method: GET
Request URL: http://127.0.0.1:8000/
Django Version: 1.8.4
Exception Type: OperationalError
Exception Value:
no such column: account_profile.scores
Exception Location: C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 318
Python Executable: C:\Python27\python.exe
Python Version: 2.7.5
Python Path:
['c:\\FairyBBS',
'C:\\Users\\user\\AppData\\Roaming\\Python\\Python27\\site-packages\\setuptools-5.4.1-py2.7.egg',
'C:\\Users\\user\\AppData\\Roaming\\Python\\Python27\\site-packages\\urlobject-2.4.0-py2.7.egg',
'C:\\Users\\user\\AppData\\Roaming\\Python\\Python27\\site-packages\\djangorestframework-0.4.0-py2.7.egg',
'C:\\WINDOWS\\SYSTEM32\\python27.zip',
'C:\\Python27\\DLLs',
'C:\\Python27\\lib',
'C:\\Python27\\lib\\plat-win',
'C:\\Python27\\lib\\lib-tk',
'C:\\Python27',
'C:\\Users\\user\\AppData\\Roaming\\Python\\Python27\\site-packages',
'C:\\Python27\\lib\\site-packages']
Server time: ???, 17 ?? 2016 14:08:04 +0800
Run Code Online (Sandbox Code Playgroud)
itz*_*nTV 14
快速解决.
首先删除字段scores,然后
python manage.py makemigrations
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
如果发生任何错误
python manage.py migrate --fake
Run Code Online (Sandbox Code Playgroud)
然后添加字段scores.然后
python manage.py makemigrations
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
那么问题不在于您的 makemigrations 命令或 models.py。这是因为您可能已经在 views.py 文件中的模型(在本例中为您的数据库)中导入了您的类,问题就在于此。如果您阅读了所有错误消息,那么您可以轻松理解。
只需尝试注释该导入部分并运行您的python.manage.py makemigrations和python manage.py migrate命令,然后您就可以import在您的 views.py 文件中取消注释
希望这对其他人也有用
如果您在应用程序的根级别引用模型,则可能会发生这种情况
当我更新应用程序mapping_master时,这发生在我身上。我正在添加一个新字段,如下所示:
class MappingMaster(models.Model):
...
# New field that was being added
statement = models.CharField(max_length=20, choices=STATEMENT_CHOICES, default='PNL', blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
给了我以下堆栈跟踪:
D:\Adwaith\codebase\unitapp>python manage.py makemigrations
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
338, in execute_from_command_line
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
312, in execute
django.setup()
....
....
File "C:\Python27\lib\site-packages\django\apps\config.py", line 198, in impor
t_models
self.models_module = import_module(models_module_name)
File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "D:\Adwaith\codebase\unitapp\trial_balance_entry\models.py", line 5, in <
module>
from unitapp import docclass
File "D:\Adwaith\codebase\unitapp\unitapp\docclass.py", line 139, in <module>
sample_train_type(type_classifier)
File "D:\Adwaith\codebase\unitapp\unitapp\docclass.py", line 6, in sample_trai
n_type
for mapping in MappingMaster.objects.all():
....
....
File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py", line
318, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such column: mapping_master_mappingmaster.statement
Run Code Online (Sandbox Code Playgroud)
原来我的问题完全在另一个文件中。它在trial_balance_entry应用程序中:
...
# The important line is below
from unitapp import docclass
class TrialBalanceEntry(models.Model):
...
Run Code Online (Sandbox Code Playgroud)
在 docclass.py 中,我有:
import re, csv, os
from mapping_master.models import MappingMaster
def sample_train_type(cl):
for mapping in MappingMaster.objects.all():
cl.train(mapping.entry, mapping.type)
def sample_train_category(cl):
for mapping in MappingMaster.objects.all():
cl.train(mapping.entry, mapping.category)
...
Run Code Online (Sandbox Code Playgroud)
结果是 MappingMaster 模型实例在应用程序的根目录中被引用(因为我在trial_balance_entry的模型文件中的文件开头导入了它。
我通过将导入移动到我的TrialBalanceEntry模型的内部方法之一来解决这个问题。这确保我没有任何隐藏的循环依赖。
PS 从下一次开始,请提供来自控制台的堆栈跟踪,以便我们可以更轻松地调试它。
| 归档时间: |
|
| 查看次数: |
15899 次 |
| 最近记录: |