2016-08-24 7 views
0

アプリケーションが起動するたびにコードを実行する必要があります。実際のビューコードと同じように、モデルを操作できる必要があります。具体的には、私が長いユーザー名をサポートするために、組み込みのUserモデルハックしようとしているので、私のコードは、このDjangoアプリケーションの実行コードの開始

 
def username_length_hack(sender, *args, **kwargs): 
    model = sender._meta.model 
    model._meta.get_field("username").max_length = 254 

のようなものです。しかし、私はそれを行うための適切な場所を見つけることができないようしています。私は、(ユーザーがこのアプリケーションモデルがロードされるまでにロードされることを期待して)Userモデルを使用するappのmodels.pyまたはapp.pyのいずれかにclass_preparedシグナルハンドラを追加しようとしました。 post_migrateとpre_migrateは、migrateコマンドでのみ実行されます。 settings.pyにコードを追加するのは変だと思われますが、その時点では何もロードされていません。これまでは、pre_initシグナルに接続して、Userインスタンスが生成されるたびに実行されていました。しかし、それは資源のように見えます。私はDjango 1.8を使用しています。どのように私はすべてのアプリの負荷でこれを実行できますか?

+1

[これは](http://stackoverflow.com/questions/6791911/execute-code-when-django-starts-once-only)役立つかもしれない

あなたはあなたのアプリケーションの__init__.pyにコードを追加することができます君は。 – Harrison

+3

*組み込みユーザーモデルをハックしようとしています* <=これは私が停止した場所です。[カスタムユーザーモデルをもっと簡単に提供できます](https://docs.djangoproject.com/en/1.8/topics/ auth/customizing /#指定-a-custom-user-model)。それは、ユーザー名フィールドを変更する方法も文書化されています。モンキーモデルにパッチを当てるのは良い考えではありません。 – dhke

+0

@dhkeマルチメガバイトのコードベースをカスタムユーザーモデルに変換することはできません。 –

答えて

1

私はコメントに同意します。これよりもきれいなアプローチがあります。

+0

'__init __。py'が解析されるまでにモデルが読み込まれません –

関連する問題