web-dev-qa-db-ja.com

django.core.exceptions.ImproperlyConfigured

私は最近別のマシンに移動し、Subversionからプロジェクトを再度チェックアウトする必要がありましたが、このコンピューターのDjango 1.8であり、プロジェクトは1.7を期待しています。

Dbをコードと同期して必要なテーブルを作成しようとしましたが、次のエラーが表示されます。

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
Django.core.exceptions.ImproperlyConfigured: Creating a ModelForm without either the 'fields'   attribute or the 'exclude' attribute is prohibited; form JobForm needs updating.

Django.core.exceptions.ImproperlyConfigured: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form JobForm needs updating.
16
Jon

エラーの言及と同様に、explicitlyフィールドを指定するか、除外する必要があります。

これを試して

class JobForm(models.ModelForm):
    #fields

    class Meta:
        model = Job
        fields = "__all__" 

すべてのフィールドが含まれます

関連する ドキュメント(リリースノート1.6)

以前は、ModelFormでモデルのすべてのフィールドを使用する場合、Meta.fields属性を単純に省略でき、すべてのフィールドが使用されていました。

これにより、フィールドがモデルに追加され、意図せずにエンドユーザーが自動的に編集可能になるというセキュリティ上の問題が発生する可能性があります。場合によっては、特にブール値フィールドでは、この問題が完全に見えなくなる可能性があります。これは、大量割り当ての脆弱性の一種です。

このため、この動作は非推奨であり、Meta.excludeオプションの使用は強く推奨されていません。代わりに、フォームに含めることを目的とするすべてのフィールドをfields属性に明示的にリストする必要があります。

このセキュリティ上の懸念が実際に当てはまらない場合は、すべてのフィールドを使用する必要があることを明示的に示すショートカットがあります。特別な値「__all__ "フィールド属性

67
karthikr

Django 1.7でModelFormのフィールドを設定または除外できます。1.8で変更されました。ModelForm内のMetaクラスでフィールドを設定または除外する必要があります。

class JobForm(models.ModelForm):
#fields

class Meta:
    model = Job
    fields = "__all__" 
5
david euler