简体   繁体   English

django.db.utils.OperationalError:没有这样的表:theblog_category

[英]django.db.utils.OperationalError: no such table: theblog_category

I wanted to add tags to my blog in the same way as a category, unfortunately during "makemigrations" I got an error:我想以与类别相同的方式将标签添加到我的博客中,不幸的是在“makemigrations”期间我收到了一个错误:

"django.db.utils.OperationalError: no such table: theblog_tag" “django.db.utils.OperationalError:没有这样的表:theblog_tag”

Then I tried every way I found, removed the migrations (except init.py) and db.sqlite3 and tried to do the migrations again.然后我尝试了所有找到的方法,删除了迁移(除了 init.py)和 db.sqlite3 并尝试再次进行迁移。 Unfortunately for now, the bug also affects the categories.不幸的是,目前该错误也会影响类别。

Here is traceback:这是回溯:

Traceback (most recent call last):
  File "C:\plantblog\virt\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\plantblog\virt\lib\site-packages\django\db\backends\sqlite3\base.py", line 423, in 
execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: theblog_category

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

Traceback (most recent call last):
  File "C:\plantblog\blogplant\manage.py", line 22, in <module>
    main()
  File "C:\plantblog\blogplant\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\plantblog\virt\lib\site-packages\django\core\management\__init__.py", line 419, in 
    execute_from_command_line
    utility.execute()
  File "C:\plantblog\virt\lib\site-packages\django\core\management\__init__.py", line 413, in 
    execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\plantblog\virt\lib\site-packages\django\core\management\base.py", line 354, in 
    run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\plantblog\virt\lib\site-packages\django\core\management\base.py", line 393, in 
    execute
    self.check()
  File "C:\plantblog\virt\lib\site-packages\django\core\management\base.py", line 419, in check
    all_issues = checks.run_checks(
  File "C:\plantblog\virt\lib\site-packages\django\core\checks\registry.py", line 76, in 
    run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
  File "C:\plantblog\virt\lib\site-packages\django\core\checks\urls.py", line 13, in 
    check_url_config
    return check_resolver(resolver)
  File "C:\plantblog\virt\lib\site-packages\django\core\checks\urls.py", line 23, in 
    check_resolver
    return check_method()
  File "C:\plantblog\virt\lib\site-packages\django\urls\resolvers.py", line 412, in check
    for pattern in self.url_patterns:
  File "C:\plantblog\virt\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\plantblog\virt\lib\site-packages\django\urls\resolvers.py", line 598, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "C:\plantblog\virt\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\plantblog\virt\lib\site-packages\django\urls\resolvers.py", line 591, in 
    urlconf_module
    return import_module(self.urlconf_name)
  File "C:\Users\Gryzelda\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", 
    line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "C:\plantblog\blogplant\blogplant\urls.py", line 8, in <module>
    path('', include('theblog.urls')),
  File "C:\plantblog\virt\lib\site-packages\django\urls\conf.py", line 34, in include
    urlconf_module = import_module(urlconf_module)
  File "C:\Users\Gryzelda\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", 
    line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "C:\plantblog\blogplant\theblog\urls.py", line 3, in <module>
    from .views import HomeView, PostDetailView, AddPostView, UpdatePostView, DeletePostView, 
    CategoryView, TagView
  File "C:\plantblog\blogplant\theblog\views.py", line 5, in <module>
    from .forms import PostForm, EditForm
  File "C:\plantblog\blogplant\theblog\forms.py", line 7, in <module>
    for item in choices:
  File "C:\plantblog\virt\lib\site-packages\django\db\models\query.py", line 280, in __iter__
    self._fetch_all()
  File "C:\plantblog\virt\lib\site-packages\django\db\models\query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "C:\plantblog\virt\lib\site-packages\django\db\models\query.py", line 140, in __iter__
    return compiler.results_iter(tuple_expected=True, chunked_fetch=self.chunked_fetch, 
    chunk_size=self.chunk_size)
  File "C:\plantblog\virt\lib\site-packages\django\db\models\sql\compiler.py", line 1124, in 
    results_iter
    results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
  File "C:\plantblog\virt\lib\site-packages\django\db\models\sql\compiler.py", line 1169, in 
    execute_sql
    cursor.execute(sql, params)
  File "C:\plantblog\virt\lib\site-packages\django\db\backends\utils.py", line 98, in execute
    return super().execute(sql, params)
  File "C:\plantblog\virt\lib\site-packages\django\db\backends\utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\plantblog\virt\lib\site-packages\django\db\backends\utils.py", line 75, in 
    _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\plantblog\virt\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\plantblog\virt\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\plantblog\virt\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\plantblog\virt\lib\site-packages\django\db\backends\sqlite3\base.py", line 423, in 
    execute
    return Database.Cursor.execute(self, query, params)
    django.db.utils.OperationalError: no such table: theblog_category

And here is my code:这是我的代码:

views.py视图.py

class HomeView(ListView):
    model = Post
    paginate_by = 2
    template_name = 'home.html'

    def get_context_data(self, *args, **kwargs):
        cat_menu = Category.objects.all()
        tag_menu = Tag.objects.all()
        context = super(HomeView, self).get_context_data(*args, **kwargs)
        paginator = Paginator(cat_menu, self.paginate_by)
        page = self.request.GET.get('page')
        try:
            pages = paginator.page(page)
        except PageNotAnInteger:
            pages = paginator.page(1)
        except EmptyPage:
            pages = paginator.page(paginator.num_pages)
        context["tag_menu"] = tag_menu
        context["cat_menu"] = pages
        return context

def CategoryView(request, cats):
    cat_posts = Post.objects.filter(category__iexact=cats.replace('-', ' ').replace('roj','RÓJ'))
    context = {}
    context['cats'] = cats.title().replace('-', ' ').replace('roj','rój')
    context['cat_posts'] = cat_posts
    cat_menu = Category.objects.all()
    context["cat_menu"] = cat_menu
    return render(request, 'categories.html', context)

def TagView(request, tags):
    tag_posts = Post.objects.filter(tag__iexact=tags.replace('-', ' ').replace('roj','RÓJ'))
    context = {}
    context['tags'] = tags.title().replace('-', ' ').replace('roj','rój')
    context['tag_posts'] = tag_posts
    tag_menu = Tag.objects.all()
    context["tag_menu"] = tag_menu
    return render(request, 'tags.html', context)  

class PostDetailView(DetailView):
    model = Post
    template_name = 'post_details.html'

    def get_context_data(self, *args, **kwargs):
        cat_menu = Category.objects.all()
        tag_menu = Tag.objects.all()
        context = super(PostDetailView, self).get_context_data(*args, **kwargs)
        context["cat_menu"] = cat_menu
        context["tag_menu"] = tag_menu
        return context

urls网址

urlpatterns = [
    path('', HomeView.as_view(), name="home"),
    path('post/<int:pk>', PostDetailView.as_view(), name='post-detail'),
    path('post/add', AddPostView.as_view(),name='add_post'),
    path('post/edit/<int:pk>', UpdatePostView.as_view(), name='update_post'),
    path('post/delete/<int:pk>', DeletePostView.as_view(), name='delete_post'),
    path('about-me', views.aboutme, name='aboutme'),
    path('contact.html', views.contact, name='contact'),
    path('category/<str:cats>', CategoryView, name='category'),
    path('search-blogs/', views.BlogSearchView.as_view(), name='search_blogs'),
    path('tag/<str:tags>', TagView, name='tag'),
]

models楷模

class Category(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('home')

class Tag(models.Model):
    namee = models.CharField(max_length=255)

    def __str__(self):
        return self.namee

    def get_absolute_url(self):
        #return reverse('post-detail', args=(str(self.id)))
        return reverse('home')

class Post(models.Model):
    title = models.CharField(max_length=255)
    header_image = models.ImageField(null = True, blank=True, upload_to="images/" )
    title_tag = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = RichTextField(blank=True, null=True)
    post_date = models.DateField(auto_now_add=True)
    category = models.CharField(max_length=255, default='brak kategorii' )
    tag = models.CharField(max_length=255)

    class Meta:
        ordering = ['-id']

    def __str__(self):
        return self.title + ' | ' + str(self.author)

    def get_absolute_url(self):
        return reverse('home')

forms forms

choices = Category.objects.all().values_list('name','name')
choice_list = []

for item in choices:
    choice_list.append(item)

tags = Tag.objects.all().values_list('namee','namee')
tag_list = []

for it in tags:
    tag_list.append(it)

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('title', 'title_tag', 'author', 'category', 'tag', 'body', 'header_image')

    widgets = {
        'title': forms.TextInput(attrs={'class': 'form-control'}),
        'title_tag': forms.TextInput(attrs={'class': 'form-control'}),
        'author': forms.Select(attrs={'class': 'form-control'}),
        'category': forms.Select(choices=choice_list, attrs={'class': 'form-control'}),
        'tag': forms.Select(choices=tag_list, attrs={'class': 'form-control'}),
        'body': forms.Textarea(attrs={'class': 'form-control'}),
    }

Django is initializing all your imports starting from your urls.py file which leads back to your forms.py file, this is the offending code: Django 正在初始化从您的 urls.py 文件开始的所有导入,该文件将返回您的 forms.py 文件,这是有问题的代码:

choices = Category.objects.all().values_list('name','name')
choice_list = []

for item in choices:
    choice_list.append(item)

tags = Tag.objects.all().values_list('namee','namee')
tag_list = []

Django is trying to make the query to the table category upon startup which doesn't exist in the database yet, unfortunately this also prevents actions such as makemigrations, so override the forms init function and place the code there. Django 正在尝试在启动时对数据库中尚不存在的表类别进行查询,不幸的是,这也阻止了诸如 makemigrations 之类的操作,因此请覆盖 forms 初始化 ZC1C425268E68385D14AB5074C17A9 并将代码放在那里。

Something like this:像这样的东西:

class PostForm(forms.ModelForm):

    .....

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        choices = Category.objects.all().values_list('name','name')
        choice_list = []

        for item in choices:
            choice_list.append(item)
        self.fields['category'].choices = choice_list

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 django.db.utils.OperationalError:没有这样的表:blog_category - django.db.utils.OperationalError: no such table: blog_category django.db.utils.OperationalError: 没有这样的表 Django 2 - django.db.utils.OperationalError: no such table Django 2 PythonAnywhere:django.db.utils.OperationalError:没有这样的表: - PythonAnywhere: django.db.utils.OperationalError: no such table: django.db.utils.OperationalError: 没有这样的表 - django.db.utils.OperationalError: no such table django.db.utils.OperationalError:(1050,“表‘profiles_category’已经存在”) - django.db.utils.OperationalError: (1050, "Table 'profiles_category' already exists") Django 2.2 - django.db.utils.OperationalError: 没有这样的表 - Django 2.2 - django.db.utils.OperationalError: no such table django.db.utils.OperationalError:没有这样的表:django_site - django.db.utils.OperationalError: no such table: django_site Django迁移django.db.utils.OperationalError:没有这样的表: - Django migrate django.db.utils.OperationalError: no such table: django.db.utils.OperationalError: 没有这样的表: polls_post - django.db.utils.OperationalError: no such table: polls_post Makemigrations 错误:django.db.utils.OperationalError:没有这样的表 - Makemigrations error : django.db.utils.OperationalError: no such table
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM