2010-11-24 7 views
8

問題のアプリを変更せずにINSTALLED_APPで使用されているモデルを再定義することはできますか?たとえば、django-basic-blogにはフィールドを追加するPostモデルがあります。私はdjango-basic-blogを直接編集することができましたが、コード移植性のためにその上に構築したいと思います。 Postモデルへの既存の参照をすべて保存したいので、私はサブクラス化したくありません。前もって感謝します!Djangoにインストールされているアプリケーションで定義されたモデルをオーバーライドする方法は?

答えて

11
  1. 元のフィールドをサブクラス化すると、元のテーブルには引き続き保存されるため、参照は有効なままです。あなたは猿パッチにしたい場合は

  2. ほとんどが推奨汚い方法ではない既存のクラスは、あなたが変更したいものの後にアプリにロードされるいくつかのmodels.pyファイルでcontribute_to_classを使用することができます。

models.py:

from django.db.models import CharField 
from blog.models import Post 
CharField(max_length="100").contribute_to_class(Post, 'new_field') 

あなたはこのようにそれを行う場合、あなたは常にあなたの変更は、コードの他の部分と衝突し、あなたのコードを維持するために困難になることができないリスクを露出する必要があります!

+0

私はあなたが1のための例を提供してくれればうれしいです;) – Jannis

関連する問題