PythonAnywhere环境下Django新增模型字段迁移后Admin页面不显示
问题背景
在PythonAnywhere环境下为Django项目的models.py新增模型字段时遇到异常,具体情况:
- 为
Post模型新增了description字段 - 已依次执行
python manage.py makemigrations和python manage.py migrate完成数据库结构变更 - 但Admin页面的Post列表、编辑页均未显示新增的
description字段 - 当前运行环境为PythonAnywhere,Python版本为3.8
- 相关配置代码如下:
# models.py 中 Post 模型代码 class Post(models.Model): title = models.CharField(max_length=40, unique=True) cover = models.ImageField(upload_to='images/') description = models.CharField(max_length=100) author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts') slug = models.SlugField(null=False, unique=True) def get_absolute_url(self): return reverse('post_detail', kwargs={'slug': self.slug}) updated_on = models.DateTimeField(auto_now= True) shortcontent = models.CharField(max_length=150) content = RichTextUploadingField(blank=True) created_on = models.DateTimeField(auto_now_add=True) language = models.IntegerField(choices=LANGUAGE, default=0) status = models.IntegerField(choices=STATUS, default=0) class Meta: ordering = ['-created_on'] def __str__(self): return self.title
# admin.py 中现有配置代码 class PostAdmin(admin.ModelAdmin): list_display = ('title', 'status','created_on') list_filter = ("status",) search_fields = ['title', 'content', 'description'] prepopulated_fields = {'slug': ('title',)} class Media: js = ('ckeditor.js',) # Django会自动从静态文件目录查找js资源,无需手动加/static前缀 admin.site.register(Post, PostAdmin)
解决方法
核心原因说明:目前的admin配置里,仅将description加入了search_fields(该配置仅控制后台搜索功能的匹配范围,不会让字段本身显示在页面上),未在实际控制页面展示的配置中加入该字段,因此无法正常显示。按以下步骤调整即可:
- 若需要在Post的后台列表页展示
description列:修改PostAdmin中的list_display配置,把description加入元组,示例:list_display = ('title', 'status', 'created_on', 'description') - 若需要在Post的编辑表单页展示
description字段:- 如果你没有为
PostAdmin自定义fields、fieldsets、exclude这类限定表单展示范围的配置,Django默认会自动把所有非系统自动生成的模型字段渲染到编辑表单中,无需额外配置; - 如果你之前自定义了表单的展示字段范围,只要在对应的配置列表中把
description加入即可,常见配置示例:# 直接指定编辑页展示的字段列表 fields = ['title', 'cover', 'description', 'shortcontent', 'content', 'status'] # 或在分组字段配置fieldsets的对应分组中加入'description'
- 如果你没有为
- 配置调整完成后,需要回到PythonAnywhere的Web管理页,点击对应应用的Reload按钮重启服务,让修改后的admin配置生效。
- 可选校验:执行
python manage.py showmigrations命令,确认对应app的迁移记录已标记为[X]已应用状态,排除迁移实际未同步到数据库的问题。
内容的提问来源于stack exchange,提问作者Laura Z
相关产品推荐
相关产品推荐

