django.core.exceptions.ImproperlyConfigured

Posted

技术标签:

【中文标题】django.core.exceptions.ImproperlyConfigured【英文标题】: 【发布时间】:2014-11-24 00:42:13 【问题描述】:

我最近搬到了另一台机器上,不得不再次从 su​​bversion 中检查我的项目,但我很确定这台计算机有 Django 1.8,而项目期待 1.7。

我尝试将我的数据库与代码同步以创建必要的表,但出现以下错误。

C:\Users\jont\Documents\ATP\Webapp>manage.py syncdb
C:\Python27\lib\site-packages\admin_tools\utils.py:9: RemovedInDjango19Warning:      
django.utils.importlib will be removed in Django 1.9.
from django.utils.importlib import import_module

c:\users\jont\documents\django-trunk\django\contrib\contenttypes\models.py:148:  
RemovedInDjango19Warning: Model class django.contrib.contenttypes.models.ContentType doesn't de
her isn't in an application in INSTALLED_APPS or else was imported before its application was  
loaded. This will no longer be supported in Django 1.9.
class ContentType(models.Model):

C:\Python27\lib\site-packages\admin_tools\dashboard\modules.py:8: RemovedInDjango19Warning: The 
django.forms.util module has been renamed. Use django.forms.utils instead.
from django.forms.util import flatatt

C:\Python27\lib\site-packages\django_tables2\tables.py:171: RemovedInDjango19Warning: SortedDict
is deprecated and will be removed in Django 1.9. attrs["base_columns"] =  
SortedDict(parent_columns)

C:\Python27\lib\site-packages\django_tables2\tables.py:193: RemovedInDjango19Warning: SortedDict 
is deprecated and will be removed in Django 1.9.
attrs["base_columns"].update(SortedDict(cols))

Traceback (most recent call last):
File "C:\Users\jont\Documents\ATP\Webapp\manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "c:\users\jont\documents\django-trunk\django\core\management\__init__.py", line 336, in
execute_from_command_line
utility.execute()
File "c:\users\jont\documents\django-trunk\django\core\management\__init__.py", line 310, in 
execute
django.setup()
File "c:\users\jont\documents\django-trunk\django\__init__.py", line 23, in setup
apps.populate(settings.INSTALLED_APPS)
File "c:\users\jont\documents\django-trunk\django\apps\registry.py", line 115, in populate
app_config.ready()
File "c:\users\jont\documents\django-trunk\django\contrib\admin\apps.py", line 22, in ready
self.module.autodiscover()
File "c:\users\jont\documents\django-trunk\django\contrib\admin\__init__.py", line 24, in  
autodiscover
autodiscover_modules('admin', register_to=site)
File "c:\users\jont\documents\django-trunk\django\utils\module_loading.py", line 73, in 
autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\Users\jont\Documents\ATP\Webapp\jobs\admin.py", line 4, in <module>
from jobs.views import registration
File "C:\Users\jont\Documents\ATP\Webapp\jobs\views.py", line 12, in <module>
from jobs.forms import ApplicantForm, JobForm, \
File "C:\Users\jont\Documents\ATP\Webapp\jobs\forms.py", line 8, in <module>
class JobForm(forms.ModelForm):
File "c:\users\jont\documents\django-trunk\django\forms\models.py", line 272, in __new__
"needs updating." % name
: Creating a ModelForm without either the 'fields'   attribute or the 'exclude' attribute is prohibited; form JobForm needs updating.

: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form JobForm needs updating.

【问题讨论】:

【参考方案1】:

就像错误提到的那样,您需要明确指定字段或排除。

试试这个

class JobForm(models.ModelForm):
    #fields

    class Meta:
        model = Job
        fields = "__all__" 

这将包括所有字段

这里是相关的documentation (release notes 1.6)

以前,如果您希望 ModelForm 使用模型上的所有字段, 您可以简单地省略 Meta.fields 属性,所有字段都会 使用。

这可能会导致将字段添加到模型中的安全问题 并且无意中自动成为最终用户可编辑的。在 在某些情况下,尤其是布尔字段,这是可能的 问题是完全看不见的。这是批量分配的一种形式 漏洞。

因此,此行为已被弃用,并使用 强烈建议不要使用 Meta.exclude 选项。相反,所有字段 旨在包含在表格中应明确列出 字段属性。

如果这种安全问题确实不适用于您的情况,有 明确指示应使用所有字段的快捷方式 - 使用 fields 属性的特殊值“__all__

【讨论】:

谢谢@karthikr,我会检查的。然而,就目前而言,恢复到 Django 1.7 似乎可以解决问题。如果我要转到 1.8,我预计需要对我的代码进行一些更改 这似乎引发了 django 1.8 的异常。它只是在 django 1.7 中引发警告,无论如何更新模型表单可能是值得的.. fields="__all__" 也需要作为inlineformset_factory() 的参数【参考方案2】:

您可以在 Django 1.7 的 ModelForm 中设置字段或排除。 在 1.8 中发生了变化,您应该在 ModelForm 的 Meta 类中设置字段或排除。

class JobForm(models.ModelForm):
#fields

class Meta:
    model = Job
    fields = "__all__" 

【讨论】:

【参考方案3】:

使用 Django 1.7 似乎可以解决问题。似乎没有一种简单的方法可以使代码适应 Django 1.8。

【讨论】:

上面还有其他答案可以提供帮助。不要验证您自己的答案,请务必验证正确的答案,以便对其他人也有帮助。

以上是关于django.core.exceptions.ImproperlyConfigured的主要内容,如果未能解决你的问题,请参考以下文章