【问题标题】:Django AttributeError: 'module' object has no attribute 'SubfieldBase'Django AttributeError:'module'对象没有属性'SubfieldBase'
【发布时间】:2018-01-14 18:40:04
【问题描述】:

我正在开发一个使用旧版本 django 创建的 django 项目。我的环境是为最新的 django 版本(1.11.4)设置的。 当我尝试python manage.py runserver 时,我得到了这个:

由 Traceback 启动的线程中未处理的异常(最近一次调用最后一次):文件

"/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", 第 228 行,在包装中

fn(*args, **kwargs)   File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py",

第 117 行,inner_run

autoreload.raise_last_exception()   File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py",

第 251 行,在 raise_last_exception 中

six.reraise(*_exception)   File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py",

第 228 行,在包装中

fn(*args, **kwargs)   File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 27,

在设置中

apps.populate(settings.INSTALLED_APPS)   File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line

108,在填充中

app_config.import_models()   File "/usr/local/lib/python2.7/dist-packages/django/apps/config.py", line

202,在 import_models 中

self.models_module = import_module(models_module_name)   File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)   File 

"/home/ahmedn1/Documents/Paymob/wallet_executive_panel-master-c109bd6fe9cd1bf793c11a5c2e97d18a1887c3ba/accounts/models.py", 第 8 行,在

import timedelta   File "/usr/local/lib/python2.7/dist-packages/timedelta/__init__.py", line

11,在

from .fields import TimedeltaField   File "/usr/local/lib/python2.7/dist-packages/timedelta/fields.py", line 18,

class TimedeltaField(six.with_metaclass(models.SubfieldBase, models.Field)): AttributeError: 'module' object has no attribute

'子域基础'

所以,问题似乎出在 django-timedeltafield 包上。我有该软件包的最新(0.7.10)版本。所以,我不明白为什么不推荐使用的 SubfieldBase 仍然存在问题。

有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: django python-2.7 ubuntu django-models


    【解决方案1】:

    django-timedelta-field 包不适用于 Django 1.10+。来自django-timedelta-field 回购:

    如果您使用的是 Django 1.8 或更高版本(并且您真的应该是),那么您应该使用包含的 DurationField() 而不是这个。

    此字段不适用于 Django 1.10,并且可能不会更新以解决问题。

    以下是 SubFieldBase1.8 release notes 弃用的解释。

    【讨论】:

    • 是的,但是那段代码在 django 模块本身内部。它不在我的项目中。我该如何改变这个?我的意思是from .fields import TimedeltaField File "/usr/local/lib/python2.7/dist-packages/timedelta/fields.py", line 18,
    • 我不明白你的问题。建议是在 Django 1.10+ 中使用 DurationField() 而不是 django-timedelta-field。如果您确实想使用 django-timedelta-field,则必须在安装之前克隆存储库并修改代码。
    • 好的,我知道了。我删除了 timedelta 的所有导入,并在迁移文件中使用了 models.DurationField 。这解决了问题。
    • @Alasdair 两个字段的用途不同吗? TimeZoneField 和 DurationField
    • @RanjuR 我认为这个问题与TimeZoneField 没有任何关系。
    【解决方案2】:

    此问题发生在 Django 版本由于软件包安装而升级时。 您可能需要运行“pip install -r requirements.txt”,它将安装与现有项目兼容的 Django 版本。

    所以试试,pip install -r requirements.txt

    让我知道它是否也适合你。

    【讨论】:

      猜你喜欢
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2015-05-16
      • 1970-01-01
      • 2022-12-20
      • 2016-07-17
      • 2015-05-26
      相关资源
      最近更新 更多