web-dev-qa-db-fra.com

django.core.exceptions.ImproperlyConfigured

J'ai récemment déménagé sur une autre machine et j'ai dû à nouveau extraire mon projet de Subversion, mais je suis sûr que cet ordinateur a Django 1.8 et le projet attend 1.7.

J'ai essayé de synchroniser ma base de données avec le code pour créer les tables nécessaires mais j'obtiens l'erreur suivante.

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

Comme les mentions d'erreur, vous devez explicitement spécifier les champs, ou les exclure.

Essaye ça

class JobForm(models.ModelForm):
    #fields

    class Meta:
        model = Job
        fields = "__all__" 

qui comprendrait tous les champs

Voici les informations pertinentes documentation (notes de version 1.6)

Auparavant, si vous vouliez qu'un ModelForm utilise tous les champs du modèle, vous pouviez simplement omettre l'attribut Meta.fields et tous les champs seraient utilisés.

Cela peut entraîner des problèmes de sécurité où des champs sont ajoutés au modèle et, involontairement, deviennent automatiquement modifiables par les utilisateurs finaux. Dans certains cas, notamment avec les champs booléens, il est possible que ce problème soit complètement invisible. Il s'agit d'une forme de vulnérabilité d'affectation de masse.

Pour cette raison, ce comportement est déconseillé et l'utilisation de l'option Meta.exclude est fortement déconseillée. Au lieu de cela, tous les champs destinés à être inclus dans le formulaire doivent être répertoriés explicitement dans l'attribut fields.

Si ce problème de sécurité ne s'applique pas vraiment dans votre cas, il existe un raccourci pour indiquer explicitement que tous les champs doivent être utilisés - utilisez la valeur spéciale "__all__ "pour l'attribut fields

68
karthikr

Vous pouvez définir des champs ou les exclure dans ModelForm dans Django 1.7. Il change dans 1.8, vous devez définir des champs ou exclure dans la classe Meta dans ModelForm.

class JobForm(models.ModelForm):
#fields

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