Django后台访问委员会设置页面提示committees_setting表不存在的问题求助
Django后台访问委员会设置页面提示committees_setting表不存在的问题求助
各位好,我最近在开发Django项目的委员会管理模块时遇到了一个棘手的问题——当我访问后台的委员会设置页面(http://localhost:8000/admin/committees/setting/)时,直接抛出了ProgrammingError,提示数据库里找不到committees_setting这个表。
错误详情
Error: ProgrammingError at /admin/committees/setting/ relation "committees_setting" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "committees_setting" ^ Request Method: GET Request URL: http://localhost:8000/admin/committees/setting/ Django Version: 4.0.8 Exception Type: ProgrammingError Exception Value: relation "committees_setting" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "committees_setting" ^ Exception Location: /usr/local/lib/python3.8/site-packages/django/db/backends/utils.py, line 89, in _execute Python Executable: /usr/local/bin/python Python Version: 3.8.17 Python Path: ['/app', '/app', '/usr/local/lib/python38.zip', '/usr/local/lib/python3.8', '/usr/local/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/site-packages', '/app/administration', '/app/administration']
我的模型代码
我定义了两个关联的核心模型,分别是Setting(委员会配置)和Committee(委员会主体),代码如下:
1. Setting模型(administration/committees/models/settings.py)
"""Settings Committees models""" # Django from django.db import models # Models from administration.utils.models import BaseModel # Exceptions from administration.committees.exceptions import ( SettingsImproperlyConfigured, ) class Setting(BaseModel): """ Settings Committees model A Settings Committees Model contains business information about the committee. """ committee = models.OneToOneField( "committees.Committee", on_delete=models.CASCADE, related_name="settings" ) settings = models.JSONField() def __str__(self): """Return committee name""" return f"{self.committee}' settings" def get_setting(self, key, default=False): """Return dynamic key setting""" return self.settings.get(key, default) def late_fee_settings(self): """Return late fee setting""" late_fee_settings = self.settings.get("late_fee", False) if not late_fee_settings: raise SettingsImproperlyConfigured("late_fee not found") return late_fee_settings def late_fee_is_active(self): """Return late fee setting""" late_fee_settings = self.late_fee_settings() return late_fee_settings.get("active", False) def late_fee_percentage(self): """Return late fee setting""" late_fee_settings = self.late_fee_settings() late_fee_percentage = late_fee_settings.get("percentage", False) if not late_fee_percentage: raise SettingsImproperlyConfigured("late fee percentage not found") return late_fee_percentage def late_fee_has_penalty_fee(self): """Return late fee setting""" late_fee_settings = self.late_fee_settings() return late_fee_settings.get("has_penalty_fee", False) def penalty_fee_settings(self): """Return penalty fee setting""" penalty_fee_settings = self.settings.get("penalty_fee", False) if not penalty_fee_settings: raise SettingsImproperlyConfigured("penalty_fee not found") return penalty_fee_settings def penalty_fee_percentage(self): """Return penalty fee setting""" penalty_fee_settings = self.penalty_fee_settings() penalty_fee_percentage = penalty_fee_settings.get("percentage", False) if not penalty_fee_percentage: raise SettingsImproperlyConfigured("penalty fee percentage not found") return penalty_fee_percentage def debt_fee_settings(self): """Return debt fee setting""" debt_fee_settings = self.settings.get("debt_fee", False) if not debt_fee_settings: raise SettingsImproperlyConfigured("debt_fee not found") return debt_fee_settings def debt_fee_percentage(self): """Return debt fee setting""" debt_fee_settings = self.debt_fee_settings() debt_fee_percentage = debt_fee_settings.get("percentage", False) if not debt_fee_percentage: raise SettingsImproperlyConfigured("debt fee percentage not found") return debt_fee_percentage
2. Committee模型(administration/committees/models/__init__.py)
"""Committees models""" # Django from django.db import models from django.conf import settings # Exceptions from administration.committees.exceptions import ( SettingNotFound, ) # Models from administration.utils.models import BaseModel from .settings import Setting class CommitteeManager(models.Manager): """Committee Manager""" def get_settings(self, committee_id): """Get committee settings by id""" try: return Setting.objects.get(committee__id=committee_id) except Setting.DoesNotExist as exc: raise SettingNotFound('El consorcio no cuenta con una configuracion') from exc class Committee(BaseModel): """ Committees model A Committees Model is in charge of manage a Building. """ building = models.OneToOneField("buildings.Building", on_delete=models.CASCADE) name = models.CharField("committee name", max_length=255) objects = CommitteeManager() def __str__(self): return self.name
我已经排查过的点
- 确认
Setting模型已经在admin.py中完成注册; - 运行过
makemigrations和migrate命令,过程没有报错; - 检查了
BaseModel,它正确继承了models.Model,并包含基础的时间戳字段;
我现在的困惑是:按照Django的表名生成规则,committees应用下的Setting模型应该对应committees_setting表,但数据库里却没有这个表。是不是我的模型定义有什么隐性问题,导致迁移没有生成对应的表?
有没有大佬能帮我分析下问题出在哪,该怎么解决?
内容来源于stack exchange
相关产品推荐
相关产品推荐

