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

Django中出现Expected an indented block错误,请求排查解决

解决Django模型中的Expected an indented block错误

嘿,这个问题我太熟了!你碰到的Expected an indented block是Python最常见的语法报错之一,咱们来一步步拆解解决:

首先看你代码里的这段:

def __unicode__(self):
    # return self.title

你把__unicode__方法里的返回语句注释掉了,导致这个方法完全是空的。Python有个硬性规定:每个函数/方法定义后,必须跟着缩进的可执行代码块——哪怕啥都不干,也得用pass来占位,不然就会抛出这个缩进错误。

另外,我还发现两个容易踩坑的细节,顺便给你提个醒:

  • CharField必须指定max_length参数,这是Django的硬性要求,不然运行时会直接报错,比如标题可以设max_length=120,内容根据需求设更长的数值
  • 如果你用的是Python 3,其实完全不需要__unicode__方法,只保留__str__就足够了;要是还在维护Python 2的老项目,那得把__unicode__的内容补全,不能空着

修正后的完整代码

from __future__ import unicode_literals
from django.db import models

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=120)  # 补充必填的max_length参数
    content = models.CharField(max_length=2000)  # 根据实际需求调整长度
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

    def __str__(self):
        return self.title

    # 如果你用Python 2环境,就保留下面这段并取消注释,Python 3直接删掉即可
    # def __unicode__(self):
    #     return self.title

快速修复步骤

  • 处理空方法:要么直接删掉__unicode__(Python 3推荐这么做),要么取消注释里面的return self.title,或者加个pass占位(比如def __unicode__(self): pass)
  • 给所有CharField补上max_length参数,不然Django会跟你闹脾气

这么改完之后,那个缩进错误就会消失,同时也解决了CharField的参数问题,模型就能正常运行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:29