2012-12-13 34 views
1

我成功擴展了一些管理模型和表單,但我不確定如何保持我的文件樹清潔。何處放置自定義管理相關的表單?

如果我把forms.py在同一水平admin.py,一切都完美地工作:


forms.py

class MyUserCreationForm(UserCreationForm): 
    #... 

class MyUserChangeForm(UserChangeForm): 
    #... 

admin.py

from myapp.forms import MyUserCreationForm, MyUserChangeForm 

文件樹

mypackage/ 
    admin.py 
    forms.py 

現在,爲了有我的管理有關的各種形式,從其他形式的分離,使代碼更清潔,我添加的文件夾admin把我的管理有關的各種形式。在這種情況下,URL似乎被搞砸了。去/ myapp/admin /時,我得到了默認的管理頁面,而不是我在admin.py中自定義的頁面。

管理/ forms.py

class MyUserCreationForm(UserCreationForm): 
    #... 

class MyUserChangeForm(UserChangeForm): 
    #... 

admin.py

from myapp.admin.forms import MyUserCreationForm, MyUserChangeForm 

文件樹

mypackage/ 
    admin.py 
    admin/ 
     forms.py 

我猜系統很混亂,因爲admin既是文件又是文件夾。在Django中保留自定義管理相關文件的標準方法是什麼?

EDIT:在上面所示的情況下,存在admin.py和文件夾admin之間的衝突。我試圖把admin.pyforms.py文件夾中,但它仍然不能正常工作:

管理/ forms.py

class MyUserCreationForm(UserCreationForm): 
    #... 

class MyUserChangeForm(UserChangeForm): 
    #... 

管理/ admin.py

from myapp.admin.forms import MyUserCreationForm, MyUserChangeForm 

class MyUserAdmin(UserAdmin): 

    form = MyUserChangeForm 
    add_form = MyUserCreationForm 

    list_filter =() 

    fieldsets = (
     (None, {'fields': ('username', 'number', 'password')}), 
     (_('Personal info'), {'fields': ('first_name', 'last_name')}), 
     (_('Permissions'), {'fields': ('is_active', 'is_staff',)}), 
    ) 


    add_fieldsets = (
     (None, { 
      'classes': ('wide',), 
      'fields': ('username', 'number', 'password1', 'password2')} 
     ), 
    ) 


admin.site.register(MyUser, MyUserAdmin) 

文件樹

mypackage/   
    admin/ 
     forms.py 
     admin.py 

urls.py

from django.conf.urls import patterns, include, url 

from django.contrib import admin 
admin.autodiscover() 

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

您是否收到錯誤訊息?如果是這樣,那是什麼? –

+0

網址似乎搞砸了。當去'/myapp/admin /'我得到默認的管理頁面,而不是我在'admin.py'中定製的頁面。 – jul

回答

1

首先,你需要爲了創建一個__init__.py文件放在admin目錄爲它作爲一個被處理包。

mypackage/ 
    admin/ 
     __init__.py 
     forms.py 

__init__.py文件通常爲空。請參閱Python docs on packages瞭解更多信息。其次,你不能有一個目錄admin和一個文件admin.py。當您運行import myapp.admin時,python將忽略admin.py文件,並加載admin/__init__.py

一種可能的解決方案是讓您將admin.py移動到admin/__init__.py。然後下面的導入應該正常工作。

# in e.g. your urls.py 
import myapp.admin # imports admin/__init__.py 

# in e.g your admin/__init__.py: 
from myapp.admin.forms import MyUserCreationForm, MyUserChangeForm # imports admin/forms.py 
+0

我已經有了init.py文件。我將我的admin.py移動到admin /,更改了導入路徑,但我仍然遇到同樣的問題。 – jul

+0

當你說你改變了導入路徑時,你不知道你做了什麼,所以我更新了你應該使用的導入的答案。確保你已經重新啓動了Django服務器並刪除了任何'pyc'文件。 – Alasdair

+0

我把'admin.py'和'forms.py'放在'myapp/admin /'中。在'admin.py'中,我通過myapp.admin.forms導入了我的表單MyUserCreationForm,MyUserChangeForm和我的urls.py是默認的(我編輯了我的問題來添加它)。這樣做,我仍然無法在'myurl/admin /'中看到我的模型管理員 – jul

0

從MyApp的。表單導入MyUserCreationForm,MyUserChangeForm

這將使用文件當前目錄並從中進行搜索。

嘗試改變該行:

從admin.forms進口MyUserCreationForm,MyUserChangeForm

+0

同樣的問題... – jul

0

您可以製作一個表格文件夾並將所有表格放在那裏。