繁体   English   中英

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

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

我想以与类别相同的方式将标签添加到我的博客中,不幸的是在“makemigrations”期间我收到了一个错误:

“django.db.utils.OperationalError:没有这样的表:theblog_tag”

然后我尝试了所有找到的方法,删除了迁移(除了 init.py)和 db.sqlite3 并尝试再次进行迁移。 不幸的是,目前该错误也会影响类别。

这是回溯:

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

这是我的代码:

视图.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

网址

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'),
]

楷模

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

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 正在初始化从您的 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 正在尝试在启动时对数据库中尚不存在的表类别进行查询,不幸的是,这也阻止了诸如 makemigrations 之类的操作,因此请覆盖 forms 初始化 ZC1C425268E68385D14AB5074C17A9 并将代码放在那里。

像这样的东西:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM