【问题标题】:cannot import name "Contact"无法导入名称“联系人”
【发布时间】:2013-07-30 14:08:48
【问题描述】:

我正在尝试开发我的第一个 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 文档我并没有真正理解这意味着什么。这与目录文件夹结构有关吗?

【问题讨论】:

  • models.py 导入 forms.py 和 forms.py 导入 models.py。这就是循环导入。
  • 是的,就是这样。

标签: python mysql django web-applications directory-structure


【解决方案1】:

您应该将mwa_event_model 中的models.py 放入您的forms.py 文件中,因为它是一个表单。这将修复@Wooble 的答案中注意到的循环导入。

作为旁注,也许您应该阅读naming convention of classes 的python 样式指南“PEP8”。

编辑:我在最初的回答中不小心写了mwa_event_form

【讨论】:

  • 这解决了循环导入的问题,但我不能使用 mwa_event_form 来定义我的 mwa_event_model 如下: class mwa_event_model(ModelForm): class Meta: model = mwa_event_form fields = ['bfirstName', ' blastName']
  • 这应该在您的forms.py 文件中。 ModelForm 是一种形式。
  • 它解决了问题,但我仍然无法访问我的 index.html,如果我猜它与您解决的问题无关,而是与我在 urls.py 中的映射有关:使用在 myproject.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,顺序如下: ^myapp/$ ^myapp/book_list ^myapp/pictures_for_user ^admin/doc/ ^admin/ ^myapp/add_item [name='bevolist-add- item'] 当前 URL 与其中任何一个都不匹配。
  • 也许你应该打开一个新问题。
猜你喜欢
  • 1970-01-01
  • 2011-09-21
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
相关资源
最近更新 更多