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

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

我已经排查过的点

  1. 确认Setting模型已经在admin.py中完成注册;
  2. 运行过makemigrations和migrate命令,过程没有报错;
  3. 检查了BaseModel,它正确继承了models.Model,并包含基础的时间戳字段;

我现在的困惑是:按照Django的表名生成规则,committees应用下的Setting模型应该对应committees_setting表,但数据库里却没有这个表。是不是我的模型定义有什么隐性问题,导致迁移没有生成对应的表?

有没有大佬能帮我分析下问题出在哪,该怎么解决?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:58:06