0

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 の管理者の追加/変更ページでトークンと値フィールドを入力できるようにすることが理想的です。リストには、可能なすべてのエントリを事前に入力する必要があるため、ここではインラインは適切な選択ではないようです。

現在のソリューション

  1. 追加 URL で "?package=" パラメータを期待する

  2. ModelAdmin.add_view(self, request, form_url='', extra_context=None) を上書きして URL パラメータを読み取り、トークン オブジェクトのリストを生成します。

  3. モデルの change_form テンプレートを拡張して、

  4. ModelAdmin.save_model(self, request, obj, form, change) を上書きして、追加されたフィールドを見つけるために request.data[] を調べます。(もちろん、実際には ModelForm には表示されません)。

質問

これは機能しますが、非常にハッキーなようです。Django 1.4 でこれを実装するためのよりクリーンなソリューションはありますか?

4

0 に答える 0