1

私は現在、アプリをホストし、ユーザーのデータベースを持つサイトを持っています。アプリに作成者 (つまり、ユーザー) ができるように、2 つを接続したいと思います。

更新:以下にいくつかの関連する詳細が追加され、django-registration を使用しています。

これと Django のドキュメントに従ってauthor、アプリ モデルに次の行を追加することから始めました。

from django.contrib.auth.models import User

class App(models.Model):
    name = models.CharField(max_length=200)
    ...
    author = models.ForeignKey(User)

ただし、django admin からアプリにアクセスすると、エラーDatabaseError at /admin/apps/app/ ...no such column: apps_app.author_id が表示されます。

この機能のために実行する必要がある手順は明らかに他にもありますが、この単純な追加でエラーが発生する理由が気になります。

移行に南を使用して実行しました

./manage.py schemamigration apps --auto

1 回限りの値については、「ゼロ」に設定しました。int()

./manage.py migrate apps

これはうまくいかなかったので、私はやった

./manage.py migrate apps --fake

次に、前のコマンドをもう一度実行します。 --fake はありません。

また、リンクされた SO の質問に従って、class User(User)apps/models.py にも作成する必要がありますか?

更新 2新しい django アプリを作成しました ( .manage.py startapp...「アプリ」オブジェクトと混同しないでください)。この外部キーを追加して作成する手順を実行しましたが、正常に機能しました。これからの私の唯一の結論は、それは南部への移行の問題であり、実際には私のコードに問題がないということです。

4

2 に答える 2

1

ローカルとステージの両方でこれを試しましたが、これが私が思いつく最善の解決策です。

なんらかの理由で、South は author 列を apps テーブルに追加する必要があることを「認識」しないため、--add-fieldフラグを使用して手動でスキーマを移行するオプションがあります。

やった:

/manage.py schemamigration apps --add-field app.author

それで

./manage.py migrate apps

最後のものがうまくいかない場合は、試してください

./manage.py migrate apps --fake 000x

000x移行番号はどこにありますか。これは、最初のステップの出力から取得できます。

その後、再起動すると修正されるはずです。私はこれを何度も繰り返してきましたが、最も成功したのは南に最も具体的だったときでした。毎回移行番号を指定することをお勧めします。移行番号には、その特定の変更の指示が含まれており、データベースの変換を直接適用する必要があります。

于 2012-10-04T19:53:40.560 に答える
0

./manage.py アプリの移行

これはうまくいかなかったので、私はやった

うまくいかなかったとはどういう意味ですか?どのようなエラーが表示されましたか?

同様の状況で、通常は で FK を作成しnull=True、この移行を実行してからデータ移行を作成します。これにより、FK が読み込まれます。

また、リンクされた SO の質問に従って、apps/models.py にクラス User(User) も作成する必要がありますか?

作成者を django 認証ユーザーにリンクする場合は、django.contrib.auth.models からインポートするだけです。それ以外の場合は、はい、サブクラス化する (またはそれ以上の) モデルが必要Userです。Authordjango.db.models.ModelUser

于 2012-10-04T16:35:06.730 に答える