Django模型未读取指定表名,返回项目名问题求助
问题原因及解决办法
你的问题核心是模型内的Meta类缩进错误,导致Django没有识别到自定义的表名配置,转而使用默认规则生成表名(应用名_模型名小写)。
错误代码的问题点
你当前的Meta类和__str__方法都没有作为Plans类的内部成员存在,而是和Plans同级:
class Plans(models.Model): PROJECT_NAME = models.TextField() class Meta: # 缩进错误,不属于Plans类的内部类 db_table = 'schema.table' managed = False def __str__(self): # 缩进错误,不属于Plans类的方法 return self.PROJECT_NAME
修正后的代码
将Meta类和__str__方法缩进,放到Plans类内部:
class Plans(models.Model): PROJECT_NAME = models.TextField() class Meta: # 正确缩进,作为Plans的内部类 db_table = 'schema.table' # 指定schema和表名 managed = False # 禁止Django管理表结构 def __str__(self): # 正确缩进,作为Plans的方法 return self.PROJECT_NAME
验证方法
重新进入Django shell测试(注意应用名是compareTemplates,和目录名一致):
python manage.py shell from compareTemplates.models import Plans print(Plans._meta.db_table)
此时应该会输出你预期的schema.table。
额外检查点
- 确认应用
compareTemplates已在settings.py的INSTALLED_APPS中注册:
INSTALLED_APPS = [ # ...其他默认应用 'compareTemplates', ]
- 确保导入模型时的应用名拼写准确,和目录名称完全一致。
内容的提问来源于stack exchange,提问作者Roger i
相关产品推荐
相关产品推荐

