首页 文章

在另一个应用模型中导入应用模型类

提问于
浏览
10

我有2个app: coworkersservices ,每个都有自己的models.py

在同事models.py中,我可以“从services.models导入服务” .

当我尝试在服务models.py中“从coworkers.models导入状态”时,我收到以下错误消息:

Traceback(最近一次调用最后一次):文件“/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/core/ management / commands / runserver.py“,第91行,在inner_run中self.validate(display_num_errors = True)文件”/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4 .3-py2.7.egg / django / core / management / base.py“,第266行,在validate num_errors = get_validation_errors(s,app)文件”/ Users / lucas / Documents / projetos / cwk-manager / lib / python2.7 / site-packages / Django-1.4.3-py2.7.egg / django / core / management / validation.py“,第30行,get_app_errors()中的get_validation_errors(app_name,error)get_app_errors() . items() :文件“/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/db/models/loading.py”,行158,在get_app_errors中self._populate()文件“/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/db/ models / loading.py“,第64行,在_populate中elf.load_app(app_name,True)文件“/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/db/models /loading.py“,第88行,在load_app models = import_module(' . models',app_name)文件”/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4 .3-py2.7.egg / django / utils / importlib.py“,第35行,在import_module导入(名称)文件”/ Users / lucas / Documents / projetos / cwk-manager / cwk-manager / cwk_manager / coworkers / models.py“,第2行,来自services.models导入服务文件”/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py“,第5行,在课程服务中( models.Model):文件“/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py”,第11行,在服务状态= models.ForeignKey(Status)NameError:name'状态'未定义

coworker models.py

from django.db import models
from services.models import Services

class Status(models.Model):
    status_name = models.CharField(max_length=50)
    status_description = models.TextField(blank=True, null=True)

    class Meta:

        verbose_name = "Status"
        verbose_name_plural = "Status"

    def __unicode__(self):
        return self.status_name

services models.py

from django.db import models
from coworkers.models import Status

# This table contains all the information about plans and other general services provided.
class Services(models.Model):
    service_name = models.CharField(max_length=100)
    service_description = models.TextField(blank=True, null=True)
    service_price = models.DecimalField(max_digits=7, decimal_places=2, blank=True, null=True)
    creation_date = models.DateField(auto_now_add=True)
    last_update = models.DateField(auto_now=True)
    status = models.ForeignKey(Status)

    class Meta: 

        verbose_name = "Services"
        verbose_name_plural = "Services"

    def __unicode__(self):
        return self.service_name
  • 有人可以帮我看看我做错了什么吗?

提前致谢!

5 回答

  • 1

    在Django 1.6.5中:

    import coworkers
    status = models.ForeignKey(coworkers.models.Status)
    

    应该是这样的:

    import coworkers
    status = models.ForeignKey(coworkers.Status)
    

    我(现在)意识到OP正在使用Django 1.4.3,并且一些答案可以在那个版本的Django中解决这个问题 . 但是,我花了一段时间注意到版本,这些答案在1.6.5中不起作用 .

    干杯!

  • 10

    这是由Python中的循环导入引起的 . 您可以使用以下语法:

    status = models.ForeignKey('coworkers.models.Status')
    

    Django将使用此路径确定模型,因此您无需导入Status .

    在您的情况下,另一个解决方案是删除coworker.models中的第二个import语句,因为似乎没有在此文件中使用Services .

  • 0

    它是循环导入,导致错误 .

    你可以试试,

    import coworkers
    status = models.ForeignKey(coworkers.models.Status)
    
  • 10

    只需先创建Status模型并执行syncdb,然后创建服务模型和syncdb . 它应该工作 .

    问题是python不能找到'Status'因为它首次尝试创建服务模型 .

  • 0

    在执行syncdb时,我遇到了各种各样的错误:

    CommandError: One or more models did not validate: parts.vehicle:
    'customer' has a relation with model <class
    'customers.models.Customer'>, which has either not been installed or
    is abstract.
    

    我终于意识到我忘了将新的应用程序添加到settings.py.管理员也找不到它 . 这应该是我的第一个线索 . 否则我正在为django 1.6.5做e.thompsy的回答

相关问题