1

私は次のモデルを持っています:

class Foo(models.Model):
    field1 = models.IntegerField()
    ...

class Bar(models.Model):
    field1 = models.IntegerField()
    ...

class Foo_bar(models.Model):
    foo = models.ForeignKey(Foo)
    bar = models.ForeignKey(Bar)
    ...

管理画面では、Foo の変更/追加ページで Bar オブジェクトを指定できるようにしたいのですが、保存時に関係を表す Foo_bar オブジェクトを作成したいと考えています。管理サイト/ModelAdmins をカスタマイズしてこれを行うにはどうすればよいですか? foo と bar の間に明示的な外部キーの関係がないため、インライン化は私が必要としているものではないことに注意してください。次に、バー オブジェクトを実際に編集したくはありません。システムにあるものの中から選択したいだけです。

ありがとう。

4

3 に答える 3

2

ManyToManyFieldが必要なだけではありませんか? 管理画面では、これはオブジェクトの複数選択リストとして現れBarます。の管理画面のグループ選択部分を見てくださいUser

リレーションシップに追加のデータを添付する必要がある場合は、パラメーターを使用throughできます。

class Foo(models.Model):
    field1 = models.IntegerField()
    bars = models.ManyToManyField("Bar", related_name="foos", through="Foo_bar")

admin でこれらの追加パラメータを編集するには、foo_bar を admin に追加する必要があります。

于 2010-05-17T23:01:41.143 に答える
1

私は2つの可能性を考えることができます:

  1. モデルのカスタムフォームを作成しFoo、クエリセットを含むフィールドをモデルに追加できますBar.objects.all()。次に、ModelAdminのデフォルトのsave_form()メソッドをオーバーライドして、オブジェクトの保存時に新しいBarインスタンスを作成します。

  2. カスタムFieldクラスを作成してFooモデルに追加し、「post_save」シグナルを介してこの機能を分類できます。

于 2010-05-18T00:14:42.713 に答える