Django博客项目执行makemigrations报错:Post无publish字段
问题排查与解决
核心问题分析
- 字段名拼写错误:你的Post模型Meta类中,
ordering和indexes配置里用了'-publish',但模型实际定义的字段是published(多了一个字母d),Django找不到名为publish的字段,因此抛出该错误。 - 属性名大小写错误:
__str__方法里返回self.Title,但模型里的字段是小写的title,这会导致后续调用时触发AttributeError,建议一并修正。
修正后的模型代码
from django.db import models from django.utils import timezone from django.contrib.auth.models import User # Create your models here. class Post(models.Model): class Status(models.TextChoices): DRAFT = 'DF', 'Draft' PUBLISHED = 'PB', 'Published' title = models.CharField(max_length=250) slug = models.SlugField(max_length=250) author = models.ForeignKey(User,on_delete=models.CASCADE,related_name='blog_posts') body = models.TextField() published = models.DateTimeField(default=timezone.now) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) status = models.CharField(max_length=2,choices=Status.choices,default=Status.DRAFT) class Meta: ordering = ['-published'] # 修正字段名拼写 indexes = [ models.Index(fields=['-published']),] # 修正字段名拼写 def __str__(self): return self.title # 修正属性名大小写
后续操作步骤
- 保存修改后的
blog/models.py文件 - 重新执行迁移命令:
python manage.py makemigrations blog python manage.py migrate
内容的提问来源于stack exchange,提问作者Theow Meng Ang
相关产品推荐
相关产品推荐

