【问题标题】:Django FeinCMS and page extensions issueDjango FeinCMS 和页面扩展问题
【发布时间】:2011-07-14 06:12:16
【问题描述】:

我正在试验 Page extensionsFeinCMS 1.2.1。

我想创建这个简单的页面扩展:

from django.db import models

def register(cls, admin_cls):
    cls.add_to_class(models.TextField())

但我不断收到此错误:

AttributeError: 'module' object has no attribute 'TextField'

包含扩展的包名为dev.extensions,模块为categories,我已将其添加到Python路径中,扩展注册为Page.register_extensions('dev.extensions.categories')

我想知道我做错了什么,请帮忙。

完整的堆栈跟踪如下。

c:\sandbox\projects\feindev>python manage.py runserver
Traceback (most recent call last):
  File "manage.py", line 13, in <module>
    execute_manager(settings)
  File "c:\sandbox\environments\feincms-1.2
.1\lib\site-packages\django\core\management\__init__.py", line 436, in execute_m
anager
    setup_environ(settings_mod)
  File "c:\sandbox\environments\feincms-1.2
.1\lib\site-packages\django\core\management\__init__.py", line 419, in setup_env
iron
    project_module = import_module(project_name)
  File "c:\sandbox\environments\feincms-1.2
.1\lib\site-packages\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "c:\sandbox\projects\feindev\..\fein
dev\__init__.py", line 52, in <module>
    Page.register_extensions('dev.extensions.types')
  File "c:\sandbox\environments\feincms-1.2
.1\lib\site-packages\feincms\models.py", line 270, in register_extensions
    cls.register_extension(fn)
  File "c:\sandbox\environments\feincms-1.2
.1\lib\site-packages\feincms\module\page\models.py", line 564, in register_exten
sion
    register_fn(cls, PageAdmin)
  File "c:\sandbox\projects\feindev\dev\ext
ensions\types\__init__.py", line 4, in register
    cls.add_to_class(models.TextField())
AttributeError: 'module' object has no attribute 'TextField'

【问题讨论】:

  • 如果您在导致问题的行之前执行 print(dir(models)) 会发生什么?如果你做 print(models.__package__) ??
  • ['__builtins__', '__doc__', '__file__', '__name__', '__package__']None

标签: python django content-management-system feincms


【解决方案1】:

在您的注册功能运行之前,模型可能会在某个地方重新分配给另一个模块?

尝试将您的代码更改为:

from django.db import models as django_models

def register(cls, admin_cls):
    cls.add_to_class('field_name_here', django_models.TextField())

【讨论】:

  • 谢谢,这就是问题所在!现在它说TypeError: add_to_class() takes exactly 3 arguments (2 given),但这很好,因为需要第一个位置参数。顺便说一句,我只是想知道混乱发生在哪里......你也有任何暗示吗? :)
  • 我对 feincms 不熟悉,但我想 feincms 导入您的扩展程序的方式一定存在一些范围问题。当 register 方法被导入另一个模块时,模型的范围必须在某个时候重新定义?这只是一个猜测,因为我仍然需要研究范围在 python 中是如何工作的。
  • 问题已本地化,必须在 Page.register_templates 之前调用 Page.register_extensions。不过,即使查看 register_templates source code 我也不知道为什么。但这可能是我的极限!我真的很感激解释。谢谢。
  • add_to_class 需要两个参数,首先是模型字段的名称,然后是模型字段实例:cls.add_to_class('myfield', models.TextField())。 register_extensions 和 register_templates 的顺序无关紧要。
猜你喜欢
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 2011-10-14
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
相关资源
最近更新 更多