0

すべてのモデルを models という 1 つのフォルダーに保存していますが、問題なく動作しています。しかし、admin.py にはいくつか問題があります。このファイルをどこに保存すればよいですか? モデルフォルダー内またはアプリフォルダー内? モデルを管理パネルに挿入しようとすると、エラーが発生しました。

エラー:

TypeError at /admin/

'module' object is not iterable

Request Method:     GET
Request URL:    http://localhost:9004/admin/
Django Version:     1.4.5
Exception Type:     TypeError
Exception Value:    

'module' object is not iterable

Exception Location:     /usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py in register, line 74
Python Executable:  /usr/bin/python2.7
Python Version:     2.7.3
Python Path:    

['/home/***/**/**/Testcase_Project',
'/home/***/**/**/Testcase_Project',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PIL',
'/usr/lib/python2.7/dist-packages/gst-0.10',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',
'/usr/lib/python2.7/dist-packages/ubuntuone-couch',
'/usr/lib/python2.7/dist-packages/ubuntuone-installer',
'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']

Server time:    Sat, 16 Mar 2013 11:31:39 +0200
Traceback Switch to copy-and-paste view

/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in get_response

                                request.path_info)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py in resolve

                for pattern in self.url_patterns:

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py in url_patterns

            patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py in urlconf_module

                self._urlconf_module = import_module(self.urlconf_name)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py in import_module

        __import__(name)

    ...
▶ Local vars
/home/***/***/***/Testcase_Project/Testcase_Project/urls.py in <module>

    admin.autodiscover()

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/contrib/admin/__init__.py in autodiscover

                import_module('%s.admin' % app)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py in import_module

        __import__(name)

    ...
▶ Local vars
/home/***/***/***/Testcase_Project/Testcase_Project/admin.py in <module>

    admin.site.register(test_cases)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py in register

            for model in model_or_iterable:

    ...
▶ Local vars
4

1 に答える 1

0

オブジェクトをモジュール、パッケージなどに分割することはまったく問題ありません。Django はデフォルトでパッケージのルートにあるadmin.pyandmodels.pyファイルのみを検索することを覚えておく必要があります。ここでの解決策は、必要なファイルを明示的にインポートすることです。これを行うのに適した場所は、__init__最初にコンパイルされるファイルです。

たとえば (Django 1.4 のセットアップ、Django 構造の詳細はこちら):

/project_root
    /project
        __init__.py
        settings.py
        urls.py
    /app
        __init__.py
        admin.py
        models.py
    manage.py

次のように変換できます。

/project_root
    /project
        __init__.py
        settings.py
        urls.py
    /app
        __init__.py  # <- import statements
        /admin
            admin_foo.py
            admin_bar.py
        /models
            model_foo.py
            model_bar.py
    manage.py

次に、__init__.pyアプリフォルダー内に次を追加します。

from .models.model_foo import Foo
from .models.model_bar import Bar
from .admin.admin_foo import FooAdmin
from .admin.admin_bar import BarAdmin

また、インストールされたアプリが物事を定義する方法のため、 app_label 属性をモデルのメタ クラスに追加することを忘れないでください。

class Foo(models.Model):
    # fields...
    class Meta:
        app_label = 'app'


class Bar(models.Model):
    # fields...
    class Meta:
        app_label = 'app'
于 2013-03-16T09:10:59.530 に答える