Django - 由于 forms.py,我无法迁移我的数据库

Django - I cant migrate my database because of my forms.py

我正在尝试迁移我的 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'})

您有任何解决方案或知道为什么会这样吗?如果您需要更多信息,请问我,我不确定我是否已提供您需要的所有帮助。

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