在向模型添加字段后,"没有这样的列"

min*_*ing 10 python django

环境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)

希望这可以帮助.

  • “如果发生任何错误” //但没有错误。并且我已经尝试过else命令,但仍然无法正常工作。 (2认同)

Sho*_*rov 8

那么问题在于您的 makemigrations 命令或 models.py。这是因为您可能已经在 views.py 文件中的模型(在本例中为您的数据库)中导入了您的类,问题就在于此。如果您阅读了所有错误消息,那么您可以轻松理解。

只需尝试注释该导入部分并运行您的python.manage.py makemigrationspython manage.py migrate命令,然后您就可以import在您的 views.py 文件中取消注释

希望这对其他人也有用


Adw*_*ith 7

如果您在应用程序的根级别引用模型,则可能会发生这种情况

当我更新应用程序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 从下一次开始,请提供来自控制台的堆栈跟踪,以便我们可以更轻松地调试它。