2014-11-20 2 views
1

У меня есть следующие в xsd_messages/forms.pyDjango не может импортировать модели

import xsd_training.models 

class UpdateRequestForm(forms.Form): 
    lesson = forms.ModelChoiceField(
     queryset=xsd_training.models.Lesson.objects.all()) 

Это дает ошибку:

Traceback (most recent call last): 
    File "./manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/will/env/xSACdb/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
    utility.execute() 
    File "/home/will/env/xSACdb/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute 
    django.setup() 
    File "/home/will/env/xSACdb/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/home/will/env/xSACdb/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate 
    app_config.import_models(all_models) 
    File "/home/will/env/xSACdb/local/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models 
    self.models_module = import_module(models_module_name) 
    File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/home/will/local/xSACdb/xsd_members/models.py", line 6, in <module> 
    from xsd_training.models import PerformedLesson 
    File "/home/will/local/xSACdb/xsd_training/models.py", line 8, in <module> 
    import xsd_messages.views 
    File "/home/will/local/xSACdb/xsd_messages/views.py", line 15, in <module> 
    from xsd_messages.forms import MailingComposeForm, UpdateRequestForm 
    File "/home/will/local/xSACdb/xsd_messages/forms.py", line 14, in <module> 
    class UpdateRequestForm(forms.Form): 
    File "/home/will/local/xSACdb/xsd_messages/forms.py", line 26, in UpdateRequestForm 
    queryset=xsd_training.models.Lesson.objects.all()) 
AttributeError: 'module' object has no attribute 'models' 

Однако существует модели, как доказано с помощью оболочки:

>>> import xsd_training.models 
>>> xsd_training.models.Lesson.objects.all() 
[<Lesson... 

Что такое продолжается?

ответ

4

У вас есть круглые ссылки: members.models импортирует training.models, который импортирует messages.views, который импортирует mesages.forms, который импортирует training.models ..., что кругооборот не может быть разрешен, поэтому Python сообщает об ошибке.

Вам нужно сломать эту цепь. Не видя кода, я больше не могу помочь вам, но глубоко подозрительно, что файл моделей импортирует файл представлений: этого действительно не должно быть.

+0

Не то, что я делал раньше, начинаю понимать, что это действительно плохая идея! У меня есть некоторые статические методы внутри требуемого представления. Думаю, я собираюсь переместить их в свой собственный модуль. – wjdp

+0

Да, это правильная вещь. –

0

Перемещено import xsd_messages.views в xsd_training.models внутри функции, а не в верхней части файла.

+0

И тогда это сработало? – doniyor

+0

Да, но все же был дефект дизайна импорта файла представлений в файле моделей, скорее всего, сломался бы при тестировании. См. Ответ Дэниела Роземана – wjdp

Смежные вопросы