【问题标题】:OperationalError no such columnOperationalError 没有这样的列
【发布时间】:2017-11-01 13:13:16
【问题描述】:

我尝试了py manage.py makemigrations 然后py manage.py migrate 但是当我向我的模型添加一个新字段时,会发生此错误。我也尝试过删除所有迁移并进行 makemigrations 并再次迁移,但它仍然没有解决问题。

基本上我有一个模型Schedule,我在其中添加了一个Customer字段,关系是customer = models.ForeignKey(Customer)

这是我的模型:

class Schedule(models.Model):

    name = models.CharField(max_length=250)
    deadline_date = models.DateField()
    is_completed = models.BooleanField(default=False)
    description = models.CharField(max_length=1000, default="")
    customer = models.ForeignKey(Customer)

这里是迁移:

class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('core', '0007_customer'),
    ]

    operations = [
        migrations.CreateModel(
            name='Schedule',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=250)),
                ('deadline_date', models.DateField()),
                ('deadline_time', models.TimeField()),
                ('is_completed', models.BooleanField(default=False)),
                ('description', models.CharField(default='', max_length=1000)),
                ('responsible_department', models.CharField(choices=[('Inventory', 'Inventory'), ('Sales', 'Sales'), ('Procurement', 'Procurement'), ('Accounting', 'Accounting'), ('Technical', 'Technical'), ('Admin', 'Admin')], default='Sales', max_length=30)),
                ('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Customer')),
            ],
        ),
    ]

这是回溯:

Traceback:

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\backends\utils.py" in execute
  65.                 return self.cursor.execute(sql, params)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\backends\sqlite3\base.py" in execute
  328.         return Database.Cursor.execute(self, query, params)

The above exception (no such column: schedule_schedule.customer_id) was the direct cause of the following exception:

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\core\handlers\exception.py" in inner
  41.             response = get_response(request)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\core\handlers\base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\core\handlers\base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\contrib\admin\options.py" in wrapper
  551.                 return self.admin_site.admin_view(view)(*args, **kwargs)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\utils\decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\views\decorators\cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\contrib\admin\sites.py" in inner
  224.             return view(request, *args, **kwargs)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\utils\decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\utils\decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\utils\decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\contrib\admin\options.py" in changelist_view
  1662.             selection_note=_('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\models\query.py" in __len__
  232.         self._fetch_all()

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\models\query.py" in _fetch_all
  1118.             self._result_cache = list(self._iterable_class(self))

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\models\query.py" in __iter__
  53.         results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\models\sql\compiler.py" in execute_sql
  894.             raise original_exception

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\models\sql\compiler.py" in execute_sql
  884.             cursor.execute(sql, params)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\backends\utils.py" in execute
  80.             return super(CursorDebugWrapper, self).execute(sql, params)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\backends\utils.py" in execute
  65.                 return self.cursor.execute(sql, params)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\utils.py" in __exit__
  94.                 six.reraise(dj_exc_type, dj_exc_value, traceback)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\utils\six.py" in reraise
  685.             raise value.with_traceback(tb)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\backends\utils.py" in execute
  65.                 return self.cursor.execute(sql, params)

File "C:\Program Files (x86)\Python36-32\lib\site-packages\django-1.11.4-py3.6.egg\django\db\backends\sqlite3\base.py" in execute
  328.         return Database.Cursor.execute(self, query, params)

Exception Type: OperationalError at /admin/schedule/schedule/
Exception Value: no such column: schedule_schedule.customer_id

【问题讨论】:

  • 您在尝试迁移时是否遇到任何错误?您是否尝试过使用 --fake-initial 进行迁移?
  • 我们可以看看你的整个模型吗?
  • @souldeux 迁移时没有错误。即使使用 --fake 它仍然会产生错误

标签: django model


【解决方案1】:

如果您删除了所有迁移并重新运行 makemigrations,那么您的迁移和数据库将不同步。

最简单的解决方法是删除数据库并再次运行migrate。如果您有重要数据并且无法删除数据库,那么让数据库和迁移重新同步可能会很棘手。您需要手动创建customer_id 列,并且可能还需要进行其他更改。

【讨论】:

  • 对不起,先生,您如何删除数据库?
  • 这取决于您使用的数据库引擎。如果您使用的是 sqlite,您只需删除 db.sqlite3 文件。
  • 我删除了我的数据库并再次迁移,但仍然没有解决问题
  • 请编辑您的问题并为schedule 应用添加迁移文件。
  • 我添加了迁移文件,先生
【解决方案2】:

你给它命名了两次。

customer = ...(Customer)

Django 无法区分。

【讨论】:

    【解决方案3】:

    就我而言,我打开了我的 sqlite 数据库并手动添加了该字段。这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2014-12-06
      • 2020-08-16
      • 2020-12-01
      • 2021-01-12
      • 2021-01-27
      • 2016-06-29
      相关资源
      最近更新 更多