0

我正在学习 django admin,我必须对它们之间的一对多关系进行建模。我有类似制造商模型的东西,我可以在其中添加不同的汽车制造商,以及用于添加汽车的汽车模型。在我的 django 管理页面中,当我单击制造商 1 条目时,我希望能够显示由制造商 1 制造的所有汽车的列表。

我通过在制造商管理模型中使用内联模型找到了一个技巧,问题是它会加载数据库中的每个条目并且需要一些时间,因为它是一个大表。

还有其他方法可以做到这一点还是我必须创建一个新模板?

编辑: 目标不是像使用 InlineModelAdmin 那样将 FK 的每辆汽车加载到 Manufacturer1,而是要获得与 display_list 相同的显示,并将结果拆分为页面

4

3 回答 3

2

回答您更新的问题:

做到这一点的方法可能是使用ProxyModels和覆盖ModelAdmin.queryset

您可以通过 扩展Car模型FordCarGMCarproxy=TrueMeta类中使用它们。

然后,您可以为每个管理员注册单独的管理员,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 时,Django 管理员仅显示具有与 Manufacturer1 的 FK 的汽车。

于 2011-05-11T13:44:23.423 回答
1

你有两个选择。

最简单的方法是反向查看关系。而不是去制造商更改表格并查看他们所有的汽车。转到汽车更改列表并按制造商过滤。您必须list_filter在汽车上设置属性ModelAdmin以包括制造商。

选项二,将是一个巨大的痛苦,但您可以覆盖change_view制造商ModelAdmin,将该制造商的汽车列表添加到extra_context. 然后,您必须在“templates/admin/yourapp/manufacturer/change_form.html”覆盖管理模板。然后,您可以添加到该模板以生成您正在寻找的列表类型,使用您传入的汽车列表,extra_context从 'django/contrib/admin/templates/change_list.html' 获取灵感。

仔细阅读Admin 上的Django 文档。里面其实信息量很大。

于 2011-05-11T16:07:50.867 回答