models.py
アプリを複数のファイルに分割しようとしています:
私の最初の推測はこうでした:
myproject/
settings.py
manage.py
urls.py
__init__.py
app1/
views.py
__init__.py
models/
__init__.py
model1.py
model2.py
app2/
views.py
__init__.py
models/
__init__.py
model3.py
model4.py
これは機能しません、そして私は見つけましたこれしかし、この解決策ではまだ問題があり、実行するとpython manage.py sqlall app1
次のような結果になります。
BEGIN;
CREATE TABLE "product_product" (
"id" serial NOT NULL PRIMARY KEY,
"store_id" integer NOT NULL
)
;
-- The following references should be added but depend on non-existent tables:
-- ALTER TABLE "product_product" ADD CONSTRAINT "store_id_refs_id_3e117eef" FOREIGN KEY ("store_id") REFERENCES "store_store" ("id") DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "product_product_store_id" ON "product_product" ("store_id");
COMMIT;
これについてはよく分かりませんが、その部分が心配ですThe following references should be added but depend on non-existent tables:
これは私の model1.py ファイルです:
from django.db import models
class Store(models.Model):
class Meta:
app_label = "store"
これは私の model3.py ファイルです:
from django.db import models
from store.models import Store
class Product(models.Model):
store = models.ForeignKey(Store)
class Meta:
app_label = "product"
どうやら動作するようですが、コメントを入力してalter table
これを試してみると、同じことが起こります:
class Product(models.Model):
store = models.ForeignKey('store.Store')
class Meta:
app_label = "product"
では、参照用の変更を手動で実行する必要がありますか? これにより、南で問題が発生する可能性がありますか?
ベストアンサー1
Django 1.9 を使用している場合は、クラス メタデータを定義せずにフレームワークによってサポートされるようになりました。
https://docs.djangoproject.com/en/1.9/topics/db/models/#パッケージ内のモデルの整理
注記:Django 2の場合、それはまだ同じです
この
manage.py startapp
コマンドは、models.py ファイルを含むアプリケーション構造を作成します。モデルが多数ある場合は、それらを別々のファイルに整理すると便利です。これを行うには、モデル パッケージを作成します。models.py を削除し、ファイルとモデルを保存するためのファイル
myapp/models/
を含むディレクトリを作成します。ファイル内のモデルをインポートする必要があります。__init__.py
__init__.py
つまり、あなたの場合、次のような構造の場合
app1/
views.py
__init__.py
models/
__init__.py
model1.py
model2.py
app2/
views.py
__init__.py
models/
__init__.py
model3.py
model4.py
必要なのは
#myproject/app1/models/__init__.py:
from .model1 import Model1
from .model2 import Model2
#myproject/app2/models/__init__.py:
from .model3 import Model3
from .model4 import Model4
すべてのクラスをインポートすることに対する注意:
各モデルを使用せずに明示的にインポートすると、
from .models import *
名前空間が乱雑にならず、コードが読みやすくなり、コード分析ツールが使いやすくなるという利点があります。