Django Migration:django.db.utils.OperationalError:没有这样的列:

时间:2015-09-11 03:12:54

标签: python django python-2.7 django-models django-admin

每当我向模型添加新列时,我都会得到:

  

django.db.utils.OperationalError:没有这样的列:companies_company。[添加列的名称]

例如,我只是添加了“employee_count”,每当我运行

python manage.py makemigrations

我明白了:

  

django.db.utils.OperationalError:没有这样的列:companies_companyadmin.employee_count

我的model.py看起来像这样:

from django.db import models

import csv

class Company(models.Model):
   name = models.CharField(max_length=70, blank=True)
   description = models.CharField(max_length=1200, blank=True)
   employee_count = models.IntegerField(blank=True)


class CompanyAdmin(models.Model):
    name = models.CharField(max_length=70, blank=True)
    description = models.CharField(max_length=1200, blank=True)
    employee_count = models.(blank=True)

with open("organizationTest.txt","rU") as f:
        reader = csv.reader(f)
        for row in reader:
            _, created = Company.objects.get_or_create(
                name=row[3].decode('latin-1').encode('utf8'),
                description=row[15].decode('latin-1').encode('utf8'),
                )

CSV部分只是填充我的数据库(我应该在其他地方填写)。

我的admin.py:

from django.contrib import admin
from .models import Company


class CompanyAdmin(admin.ModelAdmin):
    pass


admin.site.register(Company, CompanyAdmin)

当我尝试运行服务器或“syncdb”时也会发生这种情况。

如果有人知道为什么会这样,我怎么能解决这个问题,我很想知道!提前致谢!我很乐意回答您的任何问题。

2 个答案:

答案 0 :(得分:0)

就我而言,我在更新模型的某些查询集中具有一个初始值。当我删除这些初始声明时,makemigrations起作用了。

答案 1 :(得分:-1)

似乎我的原始答案不够清楚。

Company.objects.get_or_create( name=row[3].decode('latin-1').encode('utf8'), description=row[15].decode('latin-1').encode('utf8'), )

此块不在类之内,因此它在服务器启动时或基本上每次运行manage.py时运行。 Company.objects.get_or_create(...)正在尝试在尚未创建的更新数据库模型上运行。要进行迁移,您必须先注释掉这一行,然后进行迁移,然后它才能工作。