2013-07-30 4 views
1

Я пытаюсь разработать свое первое приложение Django, это мое дерево каталогов:не может импортировать название «Контакт»

demo-project 
|____(html) 
|____(myproject) 
    |___db_dump.sql 
    |___manage.py 
    |___(myapp) 
    | |___(templates) 
    | |___ __init__.py 
    | |___ forms.py 
    | |___ models.py 
    | |___ tests.py 
    | |___ views.py 
    | 
    |___(myproject) 
     |___ __init__.py 
     |___ settings.py 
     |___ urls.py 
     |___ wsgi.py 

А вот мой models.py

from django.db import models 
from django.forms import ModelForm 
from myapp.forms import mwa_event_form 


class mwa_user(models.Model): 
    unique_id = models.IntegerField() 
    email = models.CharField(max_length=75) 
    firstName = models.CharField(max_length=40) 
    lastName = models.CharField(max_length=40) 
    gender = models.CharField(max_length=30) 
    birthday = models.CharField(max_length=20) 
    fbIdUser = models.CharField(max_length=20) 
    os = models.CharField(max_length=30) 


class Contact(models.Model): 
    subject = models.CharField(max_length=100) 
    message = models.CharField(max_length=100) 
    sender = models.EmailField(max_length=100) 


class mwa_event_model(ModelForm): 
    class Meta: 
     model = mwa_event_form 
     fields = ['bfirstName', 'blastName'] 

и forms.py

from myapp.models import Contact 
from django import forms 


class ContactForm(forms.Form): 
    subject = forms.CharField(max_length=100) 
    message = forms.CharField(max_length=100) 
    sender = forms.EmailField(max_length=100) 


class mwa_user_form(forms.Form): 
    unique_id = forms.IntegerField() 
    email = forms.CharField(max_length=75) 
    firstName = forms.CharField(max_length=40) 
    lastName = forms.CharField(max_length=40) 
    gender = forms.CharField(max_length=30) 
    birthday = forms.CharField(max_length=20) 
    fbIdUser = forms.CharField(max_length=20) 
    os = forms.CharField(max_length=30) 


class mwa_event_form(forms.Form): 
    class Meta: 
     model = Contact 
     fields = ['bfirstName', 'blastName'] 

при попытке выполнить команду python manage.py runserver я получаю предупрежденного следующее:

File "/var/lib/stickshift/51e9c62e500446b4bf0000e0/approot/data/563815/myproject/myapp/models.py", line 3, in <module> 
from myapp.forms import mwa_event_form 

File "/var/lib/stickshift/51e9c62e500446b4bf0000e0/approot/data/563815/myproject/myapp/forms.py", line 1, in <module> 
from myapp.models import Contact 

ImportError: cannot import name Contact 

Что мне не хватает? Я читал в аналогичных сообщениях, что это может быть связано с циклической зависимостью, но я действительно не понял, что это значит, глядя на документацию Django. Связано ли это со структурой каталогов каталогов?

+3

models.py импортирует forms.py и forms.py import models.py. Вот что такое круговой импорт. – geoffspear

+0

В этом случае? – Ren0

+0

Да, это так. –

ответ

1

Вы должны поместить свой mwa_event_model из models.py в ваш файл forms.py, так как он является формой. Это зафиксирует циклический импорт, указанный в ответе @ Wooble.

В качестве примечания, возможно, вам следует прочитать руководство по стилю python «PEP8» для naming convention of classes.

Редактировать: Я случайно написал mwa_event_form в своем первоначальном ответе.

+0

Это решает проблему кругового импорта, но я не могу использовать mwa_event_form определить мой mwa_event_model в следующем: класс mwa_event_model (ModelForm): класс Meta: модель = mwa_event_form поля = [ «bfirstName», «blastName»] – Ren0

+0

Это должно быть в вашем файле 'forms.py'. 'ModelForm' - это тип формы. – meshy

+0

Извините, пожалуйста, см. Мое изменение к моему ответу. – meshy