【问题标题】:Django - I cant migrate my database because of my forms.pyDjango - 由于我的 forms.py,我无法迁移我的数据库
【发布时间】:2020-09-29 08:12:41
【问题描述】:

我正在尝试迁移我的 django 项目,但出现此错误:

(venv) F:\repos\meetmetrics.eu>python src\manage.py migrate
Traceback (most recent call last):
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: blog_category

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "src\manage.py", line 21, in <module>
    main()
  File "src\manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\management\base.py", line 361, in execute
    self.check()
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\management\base.py", line 390, in check
    include_deployment_checks=include_deployment_checks,
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\management\commands\migrate.py", line 65, in _run_checks
    issues.extend(super()._run_checks(**kwargs))
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\management\base.py", line 377, in _run_checks
    return checks.run_checks(**kwargs)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\checks\registry.py", line 72, in run_checks
    new_errors = check(app_configs=app_configs)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\checks\urls.py", line 13, in check_url_config
    return check_resolver(resolver)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\core\checks\urls.py", line 23, in check_resolver
    return check_method()
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\urls\resolvers.py", line 399, in check
    for pattern in self.url_patterns:
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\utils\functional.py", line 80, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\urls\resolvers.py", line 584, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\utils\functional.py", line 80, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\urls\resolvers.py", line 577, in urlconf_module
    return import_module(self.urlconf_name)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "F:\repos\meetmetrics.eu\src\try_django\urls.py", line 4, in <module>
    from blog.views import blog_post_create_view
  File "F:\repos\meetmetrics.eu\src\blog\views.py", line 13, in <module>
    from .forms import BlogPostForm
  File "F:\repos\meetmetrics.eu\src\blog\forms.py", line 16, in <module>
    class BlogPostForm(forms.ModelForm):
  File "F:\repos\meetmetrics.eu\src\blog\forms.py", line 17, in BlogPostForm
    class Meta:
  File "F:\repos\meetmetrics.eu\src\blog\forms.py", line 24, in Meta
    'category': forms.Select(choices=category_list(), attrs={'class': 'form-control'}),
  File "F:\repos\meetmetrics.eu\src\blog\utils.py", line 6, in category_list
    if not Category.objects.all().values_list('name', 'name').exists():
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\models\query.py", line 766, in exists
    return self.query.has_results(using=self.db)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\models\sql\query.py", line 522, in has_results
    return compiler.has_results()
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1110, in has_results
    return bool(self.execute_sql(SINGLE))
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1140, in execute_sql
    cursor.execute(sql, params)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\backends\utils.py", line 99, in execute
    return super().execute(sql, params)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "F:\repos\meetmetrics.eu\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: blog_category

这是我的 forms.py

from django import forms

from .models import BlogPost
from .utils import category_list

class BlogPostForm(forms.Form):
    title = forms.CharField()
    content = forms.CharField(widget=forms.Textarea)

class BlogPostForm(forms.ModelForm):
    class Meta:
        model = BlogPost
        fields = ['title', 'category', 'content', 'image', 'private', 'tags']

        widgets ={
        
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'category': forms.Select(choices=category_list(), attrs={'class': 'form-control'}),
            'content': forms.Textarea(attrs={'class': 'form-control'}),
            'image': forms.FileInput(attrs={'class': 'form-control-file'}),
            'private': forms.CheckboxInput(attrs={'class': 'form-check-label'}),
            'tags': forms.TextInput(attrs={'class': 'form-control'}),
        }

这是我的 utils.py

from .models import Category

def category_list():
    choice_list = []

    if not Category.objects.all().values_list('name', 'name').exists():
        choices = Category.objects.all().values_list('name', 'name')
        for item in choices:
            choice_list.append(item)
    else:
        choice_list.append('') 
    
    return choice_list

如果我从 forms.py 中删除此行并尝试迁移一切工作:

'category': forms.Select(choices=category_list(), attrs={'class': 'form-control'})

您有任何解决方案或任何想法吗?如果您需要更多信息,请咨询我,我不确定我是否已经为您提供了所有您需要的帮助。

【问题讨论】:

  • 您刚刚添加了Category 模型吗?
  • 因为如果是这样,那就是原因 :) 您需要迁移数据库更改才能开始使用它们!
  • @urbanespaceman 您能否更具体地了解“您刚刚添加了Category 模型吗?”
  • 呃......不知道如何更具体地了解这个问题。你刚刚添加了模型吗?迁移就是这样做的吗?
  • 不,我对所有模型都使用了迁移

标签: python django django-forms migrate


【解决方案1】:

我会先删除 pycache 目录,然后删除迁移文件夹中的所有内容,但不要删除迁移中的 init.py。之后我会尝试迁移。

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 2023-01-04
    • 2020-07-03
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2011-04-21
    • 2011-10-04
    • 2015-03-19
    相关资源
    最近更新 更多