Django admin を拡張して、インラインでは処理できないモデルの追加/変更フォームに関連フィールドを追加しようとしています。
私の単純化されたモデルは次のとおりです。
class Token(models.Model):
guid = models.CharField(max_length=38, blank=False)
class Package(models.Model):
tokens = models.ManyToManyField(Token)
class UserToken(models.Model):
user = models.ForeignKey(User)
token = models.ForeignKey(Token)
value = #Some instance specific value
expires = models.DateField(blank=False)
class UserPackage(models.Model):
user = models.ForeignKey(User)
package = models.ForeignKey(Package)
expires = models.DateField(blank=False)
私がする必要があるのは、UserTokens を作成するために Package でトークン ManyToMany 関係を使用するために UserPackage が作成されているときです。各 UserToken は、異なるインスタンス値を持つ場合があります。
UserPackage の管理者の追加/変更ページでトークンと値フィールドを入力できるようにすることが理想的です。リストには、可能なすべてのエントリを事前に入力する必要があるため、ここではインラインは適切な選択ではないようです。
現在のソリューション
追加 URL で "?package=" パラメータを期待する
ModelAdmin.add_view(self, request, form_url='', extra_context=None) を上書きして URL パラメータを読み取り、トークン オブジェクトのリストを生成します。
モデルの change_form テンプレートを拡張して、
ModelAdmin.save_model(self, request, obj, form, change) を上書きして、追加されたフィールドを見つけるために request.data[] を調べます。(もちろん、実際には ModelForm には表示されません)。
質問
これは機能しますが、非常にハッキーなようです。Django 1.4 でこれを実装するためのよりクリーンなソリューションはありますか?