1

この質問については議論がありますが、私の問題の解決策が見つかりません。

プロジェクトにいくつかのアプリケーションがあります。アプリケーション A のモデル、つまり「Test」には、テーブル「systems」とテーブル「Detail」があります。アプリケーション B、つまり「task1b」のビューで、このモデルに対してクエリを実行し、結果をテンプレートに表示したいと考えています。Test.models をインポートした後、「システム」ではなく「詳細」モデルでクエリを作成できます。特に:

#Application: task1b, views.py
from Test.models import *
def task1ba(request):
    systems=system.objects.all()
    return render_to_response("Task1B-A.html", {"systems":systems}, RequestContext(request)) 

「システム」の代わりに詳細を入力すると、エラーは発生しません。このモデルを使用して、過去に問題はありませんでした。「システム」の代わりに、他のモデルのクエリを実行しようとします。名前の問題だと思いませんか?どんなアイデアでも受け入れます。

4

1 に答える 1

3

yedpodtrzitko のコメントにあるように、これimport *が問題の根本にあると思います。Test.models からすべてをインポートすると、インポートするものすべてがインポートされるため、予期しない結果が生じる可能性があります。

以下は、明示的なインポートの使用に関するヘルプとして役立ちます: pep8 import docs

上記のコードで明示的なインポートを使用すると、次のようになります。

from Test.models import system

systems = system.objects.all

ただし、「system」という名前は、次に示す Python 標準ライブラリ os パッケージからのシステム関数呼び出しと競合している可能性があります。

python os.system ドキュメント

Python のクラス名に CapWords 規則を使用するのは慣例であるため、上記のコードにタイプミスが含まれていない限り、'system' ではなく、'System' を Django モデルの名前として使用するのが適切である可能性があります。モデルはすでに として宣言されていclass System(...ます。

つまり、「システム」は組み込み関数呼び出しを隠している可能性が高いため、必要に応じて名前を変更すると便利です。

修正されたコードは次のようになります。

#Application: task1b, views.py
from Test.models import System
def task1ba(request):
    systems=System.objects.all()
    return render_to_response("Task1B-A.html", {"systems":systems}, RequestContext(request))
于 2013-05-30T14:30:39.713 に答える