这个问题已经变形了一点。最初的问题是基于错误的数据。
我的错误跟踪已经进一步了......似乎核心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"
有什么建议吗?
答案 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发行说明中有关新项目布局的部分。
您应确保:
(复制粘贴结束,标记我的标记)。就我而言,通过调整PYTHONPATH可以解决所有问题。