You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django迁移后仍报错:无blog_marketreview.name列及blog_category表

解决Django数据库迁移相关错误

问题概述

遇到两个数据库迁移后报错的问题:

  1. 已在blog应用的MarketReview模型中定义name字段,执行makemigrations和migrate后仍报错:no such column: blog_marketreview.name
  2. blog应用中存在Category模型,迁移后仍报错:django.db.utils.OperationalError: no such table: blog_category
    已尝试删除迁移文件及整个迁移文件夹,但问题依旧。

相关代码

MarketReview模型(models.py)

class MarketReview(models.Model):
    post = models.ForeignKey(MarketPost, related_name="mreviews", on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    body = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)
    rate = models.PositiveSmallIntegerField(choices=RATE_CHOICES)

    def __str__(self):
        return '%s - %s' % (self.post.title, self.name)

MarketPost模型

class MarketPost(models.Model):
    title = models.CharField(max_length=100)
    price = models.DecimalField(default=0, max_digits=9, decimal_places=2)
    post_image = models.ImageField(null=True, blank=False, upload_to='marketplace_images/')
    content = models.TextField()
    #content = RichTextField(blank=True, null=True)
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

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

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

报错模板代码

<hr>
27    <br><br>
28  
29    {% if not post.mreviews.all %}
30    <h4>No reviews yet... Be the first one!</h4>
31    <a href="{% url 'add-marketreview' post.pk %}">Add a Review</a>
32    
33  {% else %}
34  <a href="{% url 'add-marketreview' post.pk %}">Add a Review</a>
35  <br><br>
36    {% for review in post.mreviews.all %}
37      <h4>{{ user.name }}</h4>
38      <b>{{ review.name }} - {{ review.date_added }}</b>
39      <br>
40      {{ review.body }}
41      <br>
42      <br>
43    {% endfor %}
44  {% endif %}
45  {% endblock content %}

Category模型

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

    def __str__(self):
        return self.NameOfCategory

    def get_absolute_url(self):
        #return reverse('post-detail', kwargs={'pk': self.pk})
        return reverse('blog-home')

解决方案

针对错误1:MarketReview.name字段不存在

  1. 检查迁移执行状态
    运行命令查看blog应用的迁移记录:

    python manage.py showmigrations blog
    

    确认是否有未应用的迁移,或迁移文件是否正确包含name字段的创建逻辑。

  2. 验证数据库表结构
    使用数据库管理工具(如sqlite3、pgAdmin)直接查看blog_marketreview表,确认是否存在name字段。若不存在,说明迁移未正确同步到数据库。

  3. 重置迁移并重新同步
    按以下步骤操作(注意先备份数据库):

    • 删除blog应用migrations目录下除__init__.py外的所有文件
    • 清理django_migrations表中属于blog应用的记录:
      python manage.py shell
      
      在shell中执行:
      from django.db import connection
      with connection.cursor() as cursor:
          cursor.execute("DELETE FROM django_migrations WHERE app='blog';")
      
    • 重新生成迁移:
      python manage.py makemigrations blog
      
    • 应用迁移:
      python manage.py migrate blog
      
  4. 修复模板潜在错误
    模板第37行的{{ user.name }}应为{{ review.name }},此处混淆了user和review对象,虽不是字段不存在的直接原因,但会导致后续渲染错误。

针对错误2:blog_category表不存在

  1. 确认模型与迁移状态

    • 检查Category模型是否在blog应用的models.py中,且未被注释
    • 运行python manage.py showmigrations blog,确认是否生成了Category相关的迁移文件,且已标记为[X]应用
  2. 执行迁移重置流程
    重复上述错误1中的迁移重置步骤,确保Category模型的迁移被正确生成并应用。

  3. 检查INSTALLED_APPS配置
    确认settings.py中INSTALLED_APPS包含'blog',否则Django不会处理该应用的模型迁移。

内容的提问来源于stack exchange,提问作者pyguy34

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:03:36