4

Centos VPS に Django プロジェクトがあります。

いくつかのモデルを作成してデバッグし、検証してエラーを出さないようにしました。myapp の "models" フォルダーにそれらを配置し、各モデルをこのディレクトリの init ファイルに追加しました。次に例を示します。

from カテゴリ インポート カテゴリ

アプリをsettings.pyに追加してINSTALLED_APPS実行しました:

Python manage.py syncdb

正常に動作しているように見え、アプリ用のテーブル以外のすべてのテーブルを追加しました。

次に、South をインストールして and に追加しINSTALLED_APPS、syncdb を再試行して実行しました。

Python manage.py schemamigration myapp --initial

ファイルは正しく生成されましたが、そこには何もありませんでした (モデルのテーブルはありません)。

「models」フォルダー内のサンプルファイル (usertype.py)

from django.db import models

class UserType(models.Model):
    usertype_id = models.PositiveIntegerField(primary_key=True)
    description = models.CharField(max_length=100)
    is_admin = models.BooleanField()
    is_moderator = models.BooleanField()

class Meta:
    app_label = 'myapp'

ここで何がうまくいかないのか、モデルを検出するために何も得られない理由はありますか?

4

2 に答える 2

8

あなたは南と協力するプロセスを誤解しています。South は単なるアプリケーションではなく、管理ツールです。アプリは、最初から South アプリケーションであるか、South アプリケーションに変換されている必要があります。そうは言っても、プロセスは次のようになります。

  1. INSTALLED_APPS に南を追加
  2. syncdb を初めて実行する
  3. アプリを INSTALLED_APPS* に追加します
  4. 南の初期化コマンドを実行します。

    python manage.py schemamigration myapp --initial
    
  5. 移行:

    python manage.py migrate
    

プロジェクトを変換する場合:

  1. south を追加した後に syncdb を実行する
  2. 走る:

    manage.py convert_to_south myapp

そして、今後は南を使用して移行を管理します。

*ps - 自分のアプリの前に南を置くことを念頭に置いている場合は、南と自分のアプリの両方を同時に追加できます。これは、django が INSTALLED_APPS を順番に読み取るためです。すべてのアプリで syncdb を実行しますが、south をインストールした後、残りはインストールされず、south コマンドを使用してそれらを処理するように指示されます。

編集

私はあなたを誤解させました。あなたは南部に重点を置いていたので、モデルを通常のファイルではなくディレクトリモジュールとして使用しようとしていることに問題があることに気づきませんでした。これはdjangoで認識されている問題であり、回避策は実際にはそもそもあなたとまったく同じです:

これがあなたの構造だと言います:

project/
       myapp/
            models/
                  __init__.py
                  bar.py

bar.py次のようにする必要があります。

from django.db import models

class Foo(models.Model):
    # fields...

    class Meta:
        app_label = 'myapp' #you need this!

次のようにする必要があり__init__.pyます。

from bar import Foo

このように表示され、動作することを確認してください。

更新 18/08/2014

どうやら app_label のより大きな問題が修正されたため、チケットはwntfixに変更されました。フザ!

于 2014-01-23T14:54:00.440 に答える