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

7 浏览
0 Comments

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

我有两个应用程序:coworkersservices,每个应用程序都有自己的models.py文件。

在coworkers models.py文件中,我可以使用"from services.models import Services"。

当我在services models.py文件中尝试使用"from coworkers.models import Status"时,我收到以下错误消息:

Traceback (most recent call last): File

"/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/core/management/commands/runserver.py",

line 91, in inner_run

self.validate(display_num_errors=True) File "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/core/management/base.py",

line 266, in validate

num_errors = get_validation_errors(s, app) File "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/core/management/validation.py",

line 30, in get_validation_errors

for (app_name, error) in get_app_errors().items(): File "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/db/models/loading.py", line 158, in get_app_errors

self._populate() File "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/db/models/loading.py", line 64, in _populate

self.load_app(app_name, True) File "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/db/models/loading.py", line 88, in load_app

models = import_module('.models', app_name) File "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/utils/importlib.py",

line 35, in import_module

import(name) File "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/coworkers/models.py",

line 2, in

from services.models import Services File "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py",

line 5, in

class Services(models.Model): File "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py",

line 11, in Services

status = models.ForeignKey(Status) NameError: name 'Status' is not defined

--

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

--

有人可以帮我看看我做错了什么吗?

提前谢谢!

0
0 Comments

在一个应用程序的models.py文件中,如果已经导入了当前模型类并且尝试再次导入另一个应用程序的模型类,就会出现循环导入的问题,从而导致错误。解决这个问题的方法是使用字符串引用模型类,或者将所有相关的模型类放在同一个文件中。

循环导入问题可以通过以下代码解决:

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

然而,这仍然是一个导入问题,具体发生了什么我不太确定...我过去遇到过这些错误,一个快速而简单的解决方法就是将它们放在同一个文件中。

现在我得到了以下错误信息:

File "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/coworkers/models.py", line 2, in <module> from services.models import Services File "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py", line 5, in <module> class Services(models.Model): File "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py", line 11, in Services status = models.ForeignKey(coworkers.models.Status) AttributeError: 'module' object has no attribute 'models'

这是一个导入问题,如果我已经在之前的models.py文件中导入了当前模型类,那么我就不能在另一个应用程序的models.py文件中导入这个模型类吗?这真的很烦人... 🙂

总结起来,解决循环导入问题的方法是使用字符串引用模型类或将所有相关的模型类放在同一个文件中。

0
0 Comments

在Django 1.6.5中,出现这个问题的原因是在导入应用程序的模型类时,模型类的引用方式不正确。解决方法是更改导入的模型类的引用方式。

如果代码如下:

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

应该更改为:

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

这个问题的解决方法适用于Django 1.6.5版本。在Django 1.4.3版本中,可能有其他解决方法,但这些解决方法不适用于1.6.5版本。

另外,也可以使用引号来引用模型类,如下所示:

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

这样也可以解决该问题。

0
0 Comments

在Python中,这是由于循环导入引起的。

你可以使用以下语法:

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

Django将使用这个路径来确定模型,所以你不需要导入Status。

在你的情况下,另一种解决方法是删除coworker.models中的第二个导入语句,因为Services似乎在这个文件中没有被使用。

实际上它被使用了...我只是没有贴出整个文件! 🙂

我明白了,但是还是不起作用...我将它改为一个名为"is_active"的布尔字段,现在它解决了我的问题(这个问题有点紧急)。奇怪的是它没像你说的那样起作用... =/

0