2014-09-29 5 views
15

Niedawno przeniosłem się na inną maszynę i musiałem ponownie sprawdzić mój projekt z subversion, ale jestem pewien, że ten komputer ma Django 1.8, a projekt spodziewa się 1.7.django.core.exceptions.ImproperlyConfigured

Próbowałem zsynchronizować mój db z kodem, aby utworzyć niezbędne tabele, ale pojawia się następujący błąd.

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. 

Odpowiedz

60

Podobnie jak wspomina błąd, musisz jednoznacznie podać określić pola lub wykluczyć.

Spróbuj

class JobForm(models.ModelForm): 
    #fields 

    class Meta: 
     model = Job 
     fields = "__all__" 

który obejmowałby wszystkie pola

Oto istotne documentation (release notes 1.6)

Wcześniej, jeśli chciałeś ModelForm do korzystania ze wszystkich pól na modelu możesz po prostu pominąć atrybut Meta.fields, a wszystkie pola będą użyte jako .

Może to prowadzić do problemów związanych z bezpieczeństwem, w których pola są dodawane do modelu i niechcący stają się automatycznie edytowalne przez użytkowników końcowych. W niektórych przypadkach, szczególnie w przypadku pól boolowskich, w niektórych przypadkach, szczególnie w przypadku tego , problem jest całkowicie niewidoczny. Jest to jedna z form usterki Mass .

Z tego powodu takie zachowanie jest nieaktualne, a użycie opcji meta.exclude jest zdecydowanie odradzane. Zamiast tego wszystkie pola, które są przeznaczone do umieszczenia w formularzu, powinny być wyraźnie wymienione w atrybucie fields atrybut .

Jeśli problemem bezpieczeństwa naprawdę nie ma zastosowania w przypadku, istnieje skrót jednoznacznie wskazują, że wszystkie pola powinny być stosowane - użyj wartość specjalną „__all__” dla atrybutu

+0

Dziękuję @karthikr, sprawdzę to. Jednak na razie powrót do Django 1.7 najwyraźniej rozwiązał problem. Oczekuję, że muszę wprowadzić kilka zmian do mojego kodu, jeśli mam przejść do wersji 1.8 – Jon

+0

. Wygląda na to, że powoduje to wyjątek dla django 1.8. Po prostu generuje ostrzeżenie w django 1.7, dla którego i tak warto zaktualizować formuły. – karthikr

+0

'fields =" __ all __ "' jest również wymagane jako parametr dla 'inlineformset_factory()' –

-5

Upuszczenie na Django 1.7 najwyraźniej wystarczyło. Nie było łatwego sposobu na dostosowanie kodu do Django 1.8.

+0

Nie pomaga –

+0

Istnieją inne odpowiedzi powyżej, które pomaga. Zamiast weryfikować własną odpowiedź, zweryfikuj poprawną odpowiedź, aby była pomocna również dla innych. – ashim888

5

wam pola może ustawiać pola lub wykluczać w ModelForm w Django 1.7. Zmienia się w 1.8, powinieneś ustawić pola lub wykluczyć w klasie Meta w ModelForm.