0

私はdjangoadminを学んでいます、それらの間に1対多の関係を持つモデルを作成する必要があります。さまざまな車のメーカーを追加できるメーカーモデルや、車を追加するための車モデルのようなものを手に入れました。私のdjango管理ページで、manufacturer1エントリをクリックしたときに、manufacturer1などによって製造されたすべての車のdisplay_listを表示できるようにしたいと思います。

メーカー管理モデルでインラインモデルを使用することでトリックを見つけました。問題は、データベース内のすべてのエントリが読み込まれ、大きなテーブルであるため時間がかかることです。

それを行う方法は他にありますか、それとも新しいテンプレートを作成する必要がありますか?

編集: 目標は、InlineModelAdminのようにFKであるすべての車をManufacturer1にロードするのではなく、display_listと同じ表示を取得し、結果をページに分割することです。

4

3 に答える 3

2

更新された質問への回答:

それを行う方法は、使用ProxyModelsしてオーバーライドすることです。ModelAdmin.queryset

Carを介してモデルを拡張しFordCar、クラスでGMCar使用proxy=Trueします。Meta

次に、およびのそれぞれに個別の管理者を登録FordCarGMCar、それらの各ModelAdminのquerysetメソッドをオーバーライドして、それぞれの製造元をフィルタリングできます。

元:

class FordCarAdmin(admin.ModelAdmin)
    list_display = fields = ['name','model','engine']

    def queryset(self,request):
        qs = super(MyModelAdmin, self).queryset(request)
        return qs.filter(manufacturer__name='Ford')

admin.site.register(FordCar,FordCarAdmin)
于 2011-05-11T15:15:58.443 に答える
1

ハックは必要ありません。InlineModelAdminの権利を意図したとおりに使用している限り、Manufacturer1を選択すると、DjangoadminはManufacturer1に対してFKを持つ車のみを表示します。

于 2011-05-11T13:44:23.423 に答える
1

2つのオプションがあります。

最も簡単なアプローチは、関係を逆に見ることです。メーカーの変更フォームに行き、すべての車を見る代わりに。車のチェンジリストに移動し、メーカーでフィルタリングします。メーカーを含めるにはlist_filter、車の属性を設定する必要があります。ModelAdmin

change_viewオプション2は非常に苦痛になりますが、メーカーを上書きしてModelAdmin、そのメーカーの車のリストをに追加することができますextra_context。次に、「templates / admin / yourapp / manualfacturer/change_form.html」にある管理者テンプレートをオーバーライドする必要があります。次に、そのテンプレートに追加して、渡した車のリストを使用して探している種類のリストを作成しextra_context、「django / contrib / admin / templates/change_list.html」を参考にしてインスピレーションを得ることができます。

管理者のDjangoドキュメントをよく読んでください。実際、そこには豊富な情報があります。

于 2011-05-11T16:07:50.867 に答える