我正在尝试在Django 1.7上的数据迁移期间使用admin.LogEntry对象
'django.contrib.admin'
应用列在INSTALLED_APPS
上。
在shell上,它可以工作:
>>> from django.apps import apps
>>> apps.get_model('admin', 'LogEntry')
django.contrib.admin.models.LogEntry
但是在迁移期间,它失败了:
def do_it(apps, schema_editor):
LogEntry = apps.get_model('admin', 'LogEntry')
这样失败:
django-admin migrate
(...)
LookupError: No installed app with label 'admin'.
使用调试器,我得到了'admin'没有安装:
ipdb> apps.get_apps()
[]
ipdb> apps.all_models.keys()
['website', 'google', 'allauth', 'twitter', 'busca', 'conteudo', 'django_mobile', 'django_filters', 'videocenter', 'tinymce', 'oferta', 'programacaotv', 'contenttypes', 'suit', 'haystack', 'destaque', 'filer', 'galeria', 'auth', 'facebook', 'paintstore', 'critica', 'disqus', 'fichas', 'omeletop', 'autocomplete_light', 'modelsv1', 'temas', 'django_extensions', 'adv_cache_tag', 'taggit', 'social', 'personalidade']
WHY ??
答案 0 :(得分:15)
Django doc表明了这一点:
编写 RunPython 函数时,使用的模型不是迁移所在应用程序中的模型,迁移的依赖项属性应该包含每个应用程序的最新迁移这涉及到,否则您可能会收到类似于以下内容的错误: LookupError:当您尝试在 RunPython中检索模型时,没有安装带有标签' myappname' 的应用 strong>使用 apps.get_model()。
的功能
代码示例:
# Imports are omitted for the sake of brevity
def move_m1(apps, schema_editor):
LogEntry = apps.get('admin.logentry')
# Other business logic here ...
class Migration(migrations.Migration):
dependencies = [
('app1', '0001_initial'),
# Below is the manually added dependency, so as to retrieve models
# of 'django.contrib.admin' app with apps.get_model() in move_m1().
#
# Currently this is for Django 1.11. You need to look into
# 'django/contrib/admin/migrations' directory to find out which is
# the latest migration for other version of Django.
('admin', '0002_logentry_remove_auto_add'),
]
operations = [
migrations.RunPython(move_m1),
]
答案 1 :(得分:9)
我不知道确切的原因。将不得不深入挖掘源代码。但是现在要添加一个解决方法
('admin', 'name_of_last_migration_in_admin_app')
依赖关系和迁移应该没问题。
答案 2 :(得分:8)
只需在已安装的应用程序部分中检查“ setting.py”,并确保已在其中添加了应用程序:
import socket
host = 'public ip'; port = 6000
def send():
mess = input('--> ')
s.send(bytes(mess,"utf-8"))
def receive():
msg = s.recv(1024)
print(msg.decode('utf-8'))
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((host, port))
send()
receive()
except:
pass
答案 3 :(得分:2)
我遇到了类似的错误,并且我是一个新手程序员。对我有用的一种解决方案是安装sqlparse。尝试
pip安装sqlparse
答案 4 :(得分:1)
我遇到了相同的错误(但与所提到的问题无关)。我使用的是mysql db,但没有mysql客户端。
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# other details like name, user, host
}
}
我安装了mysqlclient(在ubuntu和Python3中):
sudo apt-get install libmysqlclient-dev
sudo apt-get install python3-dev
pip install mysqlclient
答案 5 :(得分:1)
也尝试进一步查找堆栈跟踪。由于记录器配置错误,导致出现此错误,但我不得不进一步查找跟踪以发现此问题!
在我的情况下,我将环境变量DJANGO_LOG_LEVL
改名为DEGUB
而不是DEBUG
(请注意拼写错误),这引起了错误。
答案 6 :(得分:0)
我也遇到了同样的错误,即“未安装应用标签'admin'”。我可以通过运行pip install sqlparse命令来解决它
答案 7 :(得分:0)
对我来说,它显示
raise LookupError(message)
LookupError:未安装带有标签“ admin”的应用。
我通过使用ubuntu 16.04手动安装所有要求来解决此问题
答案 8 :(得分:0)
就我而言,发生LookupError的原因是我更改了模型并添加了“ related_name”,但没有运行makemigrations并进行迁移。
答案 9 :(得分:0)
在模型中使用'required = False'时出现错误: slug = models.SlugField(required = False)
我将其更改为:slug = models.SlugField(blank = True,null = True)并且错误消失了
答案 10 :(得分:0)
在将数据库从sqlite更改为postgresql并通过安装后,我也收到此错误 psycog2(用于将Django连接到Postgre数据库)我的错误消失了。
pip安装psycog2
答案 11 :(得分:0)
这也很麻烦,我所做的只是升级pip,它似乎可以自行安装其他依赖项,但是事实证明我已经拥有了所有依赖项,因此如果您处于同一位置,请尝试升级pip!
答案 12 :(得分:0)
在我的情况下,应用名称未添加到“已安装的应用”字典下的settings.py文件中
答案 13 :(得分:0)
同样的事情也发生在我身上,但在我的例子中,INSTALLED_APPS 变量在 settings.py 文件中的这个文件下面几行被覆盖了。
答案 14 :(得分:-1)
你需要做makemigrations n migrate之后才会发现这种错误