Python Django FeinCMS和页面扩展问题

Python Django FeinCMS和页面扩展问题,python,django,content-management-system,feincms,Python,Django,Content Management System,Feincms,我正在试验和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,我已将其添加到Py

我正在试验和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路径,扩展名已注册到
页面。注册扩展名('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'
c:\sandbox\projects\feindev>python manage.py运行服务器
回溯(最近一次呼叫最后一次):
文件“manage.py”,第13行,在
执行\u管理器(设置)
文件“c:\sandbox\environments\feincms-1.2
.1\lib\site packages\django\core\management\\ uu________.py”,第436行,在execute_m中
经理
设置环境(设置模块)
文件“c:\sandbox\environments\feincms-1.2
.1\lib\site packages\django\core\management\\ uu________.py”,第419行,安装环境
铁
项目\模块=导入\模块(项目\名称)
文件“c:\sandbox\environments\feincms-1.2
.1\lib\site packages\django\utils\importlib.py”,第35行,在导入模块中
__导入(名称)
文件“c:\sandbox\projects\feindev\…\fein
dev\\ uuuu init\ uuuu.py”,第52行,在
Page.register\u扩展(“dev.extensions.types”)
文件“c:\sandbox\environments\feincms-1.2
.1\lib\site packages\feincms\models.py”,第270行,在寄存器扩展中
cls.寄存器扩展(fn)
文件“c:\sandbox\environments\feincms-1.2
.1\lib\site packages\feincms\module\page\models.py”,第564行,在寄存器扩展中
锡安
寄存器(cls,页面管理)
文件“c:\sandbox\projects\feindev\dev\ext
ensions\types\\uuuuu init\uuuuuu.py“,寄存器中的第4行
cls.add_到_类(models.TextField())
AttributeError:“模块”对象没有属性“TextField”

在您的注册函数运行之前,可能会将模型重新分配到另一个模块的某个位置

尝试将代码更改为:

from django.db import models as django_models

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

如果在引起问题的行之前打印(dir(models)),会发生什么情况?如果你真的打印(型号、软件包)?
[“内置”、“文档”、“文件”、“名称”、“软件包”]
谢谢,这就是问题所在!现在它说的是
TypeError:add_to_class()正好接受3个参数(给定2个)
,但这很好,因为第一个位置参数是必需的。顺便说一句,我只是想知道混乱发生在哪里。。。你对此也有什么提示吗?:)我不熟悉feincms,但我认为feincms导入扩展的方式肯定存在一些范围问题。当register方法被导入到另一个模块中时,模型的范围必须在某个时候重新定义?这只是一个猜测,因为我仍然需要研究python中作用域的具体工作方式。问题已本地化,必须在Page.register\u模板之前调用Page.register\u扩展。尽管如此,我还是不知道为什么。但这可能是我的极限!我非常感谢你的解释。Thank.add_to_类需要两个参数,首先是模型字段的名称,然后是模型字段实例:cls.add_to_类('myfield',models.TextField())。寄存器扩展和寄存器模板的顺序应该无关紧要。