0

DjangoのForeignKeyを介して関連する2つのモデルを入手しました。(私はDjango 1.3を使用しています)

Class Person(models.Model):
    # some fields here like name, gender, etc...

Class Course(models.Model):
    # some fields here
    contact = models.ForeignKey(Person, blank=True, null=True)

コースの管理者変更リストビューで、ForeignKeyの連絡先でコースをフィルタリングできるようにしたいと思います。admin.pyで私は得ました:

class CourseAdmin(admin.ModelAdmin):
   list_filter = ('contact',)

これは非常にうまく機能します。利用可能なすべての連絡先でコースをフィルタリングできます。ここで、実際にコースが添付されている連絡先のみを表示したいと思います。私はここでSOについて読み、カスタムFilterSpecを作成してCustomFiltersを実装します。連絡先の選択肢を表示するために使用されるクエリセットをさらにフィルタリングするだけでよいので、これが正しい方向であるかどうかはわかりません。

シェルでは、これによって目的のクエリセットを取得します。

contacts=Person.objects.filter(course__in=Course.objects.all()).distinct()

1.4でこれを簡単に達成できることはすでに読みましたが、まだ1.3にバインドされています。誰かが私を正しい方向に向けてくれませんか?ありがとうございました!

4

1 に答える 1

1

Django 1.3はフィルターもサポートしていますが、フィルタークラスは1.4で移動/名前変更されました。そして、FilterSpecを使用することはあなたの目標を達成する方法です。クエリセットをフィルタリングするだけでなく、QueryStringから適用されたフィルタを適切に処理する必要があります。だから、フィルターを進めてください。これは、FKフィルタリングを処理し、適切なオプションを備えた非常に優れたスニペットです:http: //djangosnippets.org/snippets/2260/

于 2012-07-03T11:27:53.243 に答える