2012-10-27 30 views
0

我正在构建一个Django应用程序,现在我正在生产。我有这个问题:执行manage.py syncdb(所有没关系)后,我进入管理员,我无法找到模型表。我的admin.py文件存在,这是我的文件url.py:Django的生产 - 管理员没有db表加载

from django.conf.urls.defaults import patterns, include, url 
from django.contrib import admin 
# Uncomment the next two lines to enable the admin: 
# from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    # Examples: 
    # url(r'^$', 'stambol.views.home', name='home'), 
    # url(r'^stambol/', include('stambol.foo.urls')), 

    # Uncomment the admin/doc line below to enable admin documentation: 
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin: 
    url(r'^admin/', include(admin.site.urls)), 
) 

问题在哪里?

+0

你是什么意思的“无法找到模型表”?它在本地工作吗?你的生产环境与你的开发环境有什么不同(可能是nginx和runserver)? – dokkaebi

+0

当我在admin pannel中输入时,我只找到了auth,site和group模型。我没有找到其他模型(在我的models.py中,我有很多模型)。本地它工作得很好。我认为我不知道如何重新启动生产服务器... – RoverDar

回答

0

权限

首先如下图所示没有#,请确保您有权限编辑失踪模型。通常使用超级用户帐户进行开发,然后使用不同的非超级用户帐户测试您的生产部署。如果您至少没有阅读权限,则该班级完全不会在管理员中列出。

我认为这是最可能的原因,但自从我已经写下它之后,我将离开休息。

发现你的管理登记:runserver命令和生产服务器之间

一个显着的区别是,当你运行runserver,它导入所有的models.py文件并验证模型。这在生产中不会发生,所以如果您向models.py中的管理员注册模型,您需要确保导入该文件以便代码运行。你可以在你的主url conf中这样做。

最好的解决方案是在每个应用程序的admin.py文件中进行注册,以便它们被autodiscover拾取。

设置:

你确实需要安装的应用程序上市管理,为@Pratik说。它也有一些相关性,如here所述。已安装的程序至少应包含这样的:

INSTALLED_APPS = [ 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions' 
    'django.contrib.messages', 
    'django.contrib.admin', 
    #... 
    'myapp', 
    #... 
] 

确保包含您的应用程序myapp的dir是在你的Python路径,使myappautodiscover回升。这已经正确地为你工作了,否则你会得到类似ImportError: No module named myapp的东西。

重新启动服务器:touch wsgi.py

最后,只是为了回顾一下什么是注释中深埋,您可以通过触摸你的WSGI文件进行任何代码更改后重新启动生产服务器。当你这样做的时候使用Tab-Completion来确保你触摸了现有的wsgi文件,而不是由于打字错误或其他原因而创建一个新文件。

... 

# tell django to find settings at APPS_DIR/mainsite/settings.py' 
os.environ['DJANGO_SETTINGS_MODULE'] = 'mainsite.settings' 

# hand off to the wsgi application 
application = WSGIHandler() 

仍有中断:你接触应该包含这样的事情WSGI文件?

如果事情仍然没有按照预期工作,请在箱子外面思考一下。请记住,你是生产环境的新手,是否有可能除了你自己的代码之外还有其他代码?对前端页面进行一些明显的更改,重新启动服务器,并查看它是否有效。当然,这只是黑暗中的一个镜头。

+0

非常感谢@dokkaebi,我一步一步的按照步骤你的建议和一些工作!现在我有这种情况:当我重新触摸wsgi.py我有一个错误“ImportError:No module named ..”。我已经安装模块蝙蝠,我必须学习如何设置PYTHONPATH .. – RoverDar

0
from django import admin 
from example.models import YourModel 

admin.site.register(YourModel) 
# or 

class ModelAdmin(admin.ModelAdmin): 
    pass 

admin.site.register(YourModel, YourModelAdmin) 

这应该做的伎俩

+0

我在我的admin.py中有这个。我有所有模型的admin.site.register(mymodel)... – RoverDar

+0

您是否将此应用添加到安装的应用?添加admin.py文件后是否重新启动了服务器? – Efrin

+0

是的,该应用程序在“已安装的应用程序”。我不知道如何重新启动服务器。抱歉蝙蝠这是我第一次生产...... – RoverDar

0

确保您在下方settings.py除去注释里面INSTALLED_APPS。然后再次运行./manage.py syncdb。他们想在他们面前

# Uncomment the next line to enable the admin: 
    'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    'django.contrib.admindocs', 
+0

INSTALLED_APPS'django.contrib.admin'和'django.contrib.admindocs'被注释掉。 – RoverDar

+0

您必须取消注释,即它们应该被安装。 –