2012-10-27 58 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

您必須取消註釋,即它們應該被安裝。 –