2017-05-22 18 views
0

Django 1.11。私は最近myapp.modelsに次のモジュールを追加しました:新しいモデルを検出していません

from django.db import models 
from ordered_model.models import OrderedModel 

from .songs import Song 

class Service(models.Model): 
    name = models.CharField(max_len=200, unique=True) 
    date = models.DateField(blank=True) 
    items = models.ManyToManyField(ServiceItem) 

    class Meta: 
     ordering = ('-date', 'name') 

class ServiceItem(OrderedModel): 
    item = models.ForeignKey(Song) 
    song_custom_order = models.CharField(max_len=50, blank=True) 
    order_with_respect_to = 'service' 

    class Meta(OrderedModel.Meta): 
     pass 

他のモデルは別のモジュール(同じディレクトリにあります)にあります。 ./manage.py makemigrationsを実行すると、スクリプトは他のモジュールで自分の変更を検出しますが、このモジュールには反映されません。 FWIWでは、このモジュールは以前の移行履歴のない新しいコードです。

これらの変更が反映されない理由は何ですか? APP_NAMEを指定makemigrationsを実行している

+0

チェックinit__.pyあなたの場合init.pyファイルを持っていて、ファイル名がモデルかどうかを確認してください。 – Exprator

+1

モデルは 'models'パッケージの' __init__.py 'ファイルにインポートする必要があります。詳細については、[この回答](https://stackoverflow.com/a/37758721/1418794)を参照してください。 – doru

+0

ありがとう、@doru。これを答えにすると、私はそれを受け入れます。それはトリックでした。私は '' __init __。py''で自分のモデルをインポートする必要はないでしょう。 –

答えて

2

modelsパッケージの__init__.pyファイルにモデルをインポートする必要があります。 docsから:

manage.py startappのコマンドは がmodels.pyファイルを含むアプリケーションの構造を作成します。多くのモデルをお持ちの場合は、 でファイルを整理すると便利です。

これを行うには、modelsパッケージを作成します。 models.pyを削除し、 店あなたのモデルに__init__.pyファイルとファイルとの myappに/モデル/ディレクトリを作成します。モデルを__init__.pyファイルにインポートする必要があります。 たとえば、あなたがモデルでorganic.pysynthetic.pyを持っていた場合 ディレクトリ:

myappに/モデル/ __

from .organic import Person 
from .synthetic import Robot 
1

てみてください、

python manage.py makemigrations <your_app_name> 

または

./manage.py makemigrations <your_app_name> 

これはトリックを行う必要があります。

また、your_app_nameがsettings.pyファイルのINSTALLED_APPS設定に含まれていることを確認してください。

+0

ありがとうございます。しかし、この回答は異なる問題を解決しています。私の問題は上記のコメントで解決されました。 –

0

モデルディレクトリをパッケージ(init .pyがあるはずです)に作成し、そこにモデルファイルを格納することはそのトリックを行う可能性があります。

関連する問題