2014-09-29 7 views
15

Recentemente mi sono spostato su un'altra macchina e ho dovuto controllare di nuovo il mio progetto da subversion, ma sono abbastanza sicuro che questo computer abbia Django 1.8 e che il progetto sia in attesa di 1.7.django.core.exceptions.ImproperlyConfigured

Ho provato a sincronizzare il mio db con il codice per creare le tabelle necessarie ma ottengo il seguente errore.

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. 

risposta

60

Come l'errore menziona, è necessario esplicitamente specificare i campi o escludere.

Prova questo

class JobForm(models.ModelForm): 
    #fields 

    class Meta: 
     model = Job 
     fields = "__all__" 

che includa tutti i campi

Ecco il relativo documentation (release notes 1.6)

In precedenza, se si voleva un ModelForm di utilizzare tutti i campi del modello, potresti semplicemente omettere l'attributo Meta.fields, e tutti i campi dovrebbero essere .

Questo può portare a problemi di sicurezza in cui i campi vengono aggiunti al modello e, involontariamente, diventano automaticamente modificabili dagli utenti finali. In alcuni casi, in particolare con campi booleani, è possibile che questo problema sia completamente invisibile. Questa è una forma di vulnerabilità dell'assegnazione di massa .

Per questo motivo, questo comportamento è deprecato, e utilizzando l'opzione Meta.exclude è fortemente sconsigliato. Invece, tutti i campi che devono essere inclusi nel modulo devono essere elencati esplicitamente in l'attributo fields.

Se questo problema di sicurezza in realtà non si applica nel tuo caso, non v'è una scorciatoia per indicare esplicitamente che tutti i campi devono essere utilizzati - utilizzare il valore speciale "__all__" per i campi attributo

+0

Grazie @karthikr, lo controllerò. Tuttavia, per ora, tornare a Django 1.7 sembrava risolvere il problema. Mi aspetto che ci siano alcune modifiche che devono essere apportate al mio codice se dovessi andare a 1.8 – Jon

+0

Sembra che questo sollevi un'eccezione per django 1.8. Semplicemente lancia un avvertimento in django 1.7, per cui potrebbe valere la pena di aggiornare comunque i modelform. – karthikr

+0

'fields =" __ all __ "' è anche richiesto come parametro per 'inlineformset_factory()' –

-5

Dropping a Django 1.7 sembrava fare il trucco. Non sembra che sia un modo semplice per adattare il codice per adattarsi a Django 1.8.

+0

non mi aiuta –

+0

ci sono altre risposta di cui sopra che aiuta. Invece di verificare la tua risposta, verifica la risposta corretta in modo che sia utile anche per gli altri. – ashim888

5

È può impostare campi o escludere nel ModelForm in Django 1.7. Cambia in 1.8, dovresti impostare campi o escludere nella classe Meta all'interno di ModelForm.

class JobForm(models.ModelForm): 
#fields 

class Meta: 
    model = Job 
    fields = "__all__" 
Problemi correlati