0

我正在构建一个 Django 应用程序,现在我正在生产中。我有这个问题:执行manage.py syncdb(一切正常)后,我进入管理员,我找不到模型表。我的 admin.py 文件存在,这是我的文件 url.py:

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)),
)

哪里有问题?

4

3 回答 3

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)

这应该可以解决问题

于 2012-10-27T16:12:25.000 回答
0

确保您已将以下内容作为评论INSTALLED_APPS删除settings.py。然后./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',
于 2012-10-27T18:37:55.460 回答
0

权限

首先,确保您有权编辑缺失的模型。通常使用超级用户帐户进行开发,然后使用不同的非超级用户帐户测试您的生产部署。如果您至少没有读取权限,则该课程根本不会在管理员中列出。

我认为这是最可能的原因,但我将留下其余的,因为我已经写了它。

发现您的管理员注册:

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

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

设置:

正如@Pratik 所说,您确实需要在已安装的应用程序中列出管理员。它也有一些依赖项,正如这里提到的。已安装的应用程序应至少包含以下内容:

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

确保包含您的应用程序的目录myapp位于您的 python 路径中,以便myappautodiscover. 这已经为您正常工作,否则您会得到类似ImportError: No module named myapp.

重启服务器:

最后,回顾一下隐藏在注释中的内容,您可以在更改任何代码后通过触摸 wsgi 文件重新启动生产服务器:touch wsgi.py. 执行此操作时使用制表符补全,以确保您正在接触现有的 wsgi 文件,而不是由于拼写错误或其他原因而创建新文件。您正在接触的 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()

还是坏了?

如果事情仍然没有按预期工作,请跳出框框思考。请记住,您是生产环境的新手,是否有可能提供除您自己的代码之外的其他代码?对前端页面进行一些明显的更改,重新启动服务器,看看它是否有效。当然,这只是在黑暗中拍摄。

于 2012-10-28T20:24:09.627 回答