无法检测到模型的应用标签

时间:2015-12-11 22:31:00

标签: python django

这个问题已经变形了一点。最初的问题是基于错误的数据。

我的错误跟踪已经进一步了......似乎核心django代码工作正常(它可以正确读写数据库。问题是我有另一个python应用程序正在使用读取数据库的django代码相同。它以root身份运行,无法正常工作......

为了让应用程序能够读取django设置,我在文件的开头有这个:

sys.path.append(os.path.abspath("/home/pi/garageMonitor/django/garageMonitor"))
os.environ['DJANGO_SETTINGS_MODULE'] = 'garageMonitor.settings'
import models

这是我得到的错误

Traceback (most recent call last):
  File "../scripts/startPio.py", line 18, in <module>
    from webWatcher import WebWatcher
  File "/home/pi/garageMonitor/django/lib/webWatcher.py", line 14, in <module>
    import models
  File "/home/pi/garageMonitor/django/garageMonitor/models.py", line 11, in <module>
    class DoorClosing(models.Model):
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 131, in __new__
    'app.' % (new_class.__name__, model_module.__name__)
django.core.exceptions.ImproperlyConfigured: Unable to detect the app label for model "DoorClosing." Ensure that its module, "models", is located inside an installed app.

我在models.py中有一个DoorClosing模型(它恰好是文件中的第一个模型):

class DoorClosing(models.Model):
  door_name = models.CharField(max_length=45)
  start = models.DateTimeField(auto_now_add=True)
  stop = models.DateTimeField(auto_now_add=True)

  def __str__(self):
    return "DoorClosing" \
      + ",Start:" + str(self.start)\
      + ",Stop:" + str(self.stop) \
      + "\n"

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

python manage.py makemigrations

这会将您的所有模型更改与数据库同步。

如果您愿意,可以使用特定的应用名称进一步指定。但事实上,它会搜索settings.py中的每个应用并相应地更新数据库。

编辑:没关系,我认为您的问题可能存在于列本身中。 :■

答案 1 :(得分:0)

使用models.py中定义的模型创建数据库主要有三个步骤:

python manage.py makemigrations <app_name>
python manage.py sqlmigrate <app_name> 0001
python manage.py migrate 

之后,模型中发生任何更改,例如添加列等,您只需运行python manage.py syncdb,然后您可能需要再次运行python manage.py migrate

答案 2 :(得分:0)

Django 1.7 release notes状态:

不再可能具有相同标签的多个已安装应用程序。在以前的Django版本中,这并不总是能正常工作,但也没有完全崩溃。

如果您有两个带有相同标签的应用程序,则应为其中一个创建一个AppConfig并在此处覆盖其标签。然后,无论使用旧标签引用此应用程序或其模型的任何地方,都应调整代码。

不可能再通过不同的路径两次导入同一模型。从Django 1.6开始,只有在您手动在PYTHONPATH上放置目录和子目录时,这种情况才会发生。有关迁移说明,请参阅1.4发行说明中有关新项目布局的部分。

您应确保:

  • 所有模型都在INSTALLED_APPS中列出的应用程序中定义,或具有明确的app_label。
  • 模型不是作为加载应用程序的副作用而导入的。具体来说,您不应将模型导入应用程序的根模块或定义其配置类的模块中。

(复制粘贴结束,标记我的标记)。就我而言,通过调整PYTHONPATH可以解决所有问题。