1

一部の管理モデルとフォームの拡張に成功しましたが、ファイル ツリーをきれいに保つ方法がわかりません。

forms.pyと同じレベルに置くとadmin.py、すべてが完全に機能します。


フォーム.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 でカスタマイズしたページではなく、デフォルトの管理ページが表示されます。

admin/forms.py

class MyUserCreationForm(UserCreationForm):
    #...

class MyUserChangeForm(UserChangeForm):
    #...

admin.py

from myapp.admin.forms import MyUserCreationForm, MyUserChangeForm

ファイルツリー

mypackage/
    admin.py
    admin/
        forms.py

管理者はファイルとフォルダーの両方であるため、システムが混乱していると思います。カスタムの管理者関連ファイルを Django に保持する標準的な方法は何ですか?

EDIT : 上記の場合、admin.pyと folderの間に競合がありますadmin。をフォルダーに入れようとしadmin.pyましforms.pyたが、まだ機能しません。

admin/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)),
)
4

3 に答える 3

1

__init__.pyまず、パッケージとして扱われるように、admin ディレクトリにファイルを作成する必要があります。

mypackage/
    admin/
        __init__.py 
        forms.py

多くの場合、__init__.pyファイルは空です。詳細については、パッケージに関する Python ドキュメントを参照してください。

admin次に、というディレクトリとファイルを持つことはできませんadmin.py。を実行するimport myapp.adminと、python はファイルを無視し、代わりadmin.pyに読み込み admin/__init__.pyます。

考えられる解決策の 1 つは、に移動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
于 2012-12-13T13:35:01.323 に答える
0

myapp.formsからMyUserCreationForm、MyUserChangeFormをインポートします

これにより、ファイルの現在のディレクトリが使用され、そこから検索されます。

その行を次のように変更してみてください。

admin.formsからインポートMyUserCreationForm、MyUserChangeForm

于 2012-12-13T12:57:10.663 に答える
0

フォーム フォルダを作成し、そこにすべてのフォームを配置できます。

于 2012-12-13T16:36:00.447 に答える