我正在学习django管理员,我必须在他们之间建立一对多关系的模型。 我得到了像制造商模型的东西,我可以添加不同的汽车制造商,以及添加汽车的汽车模型。在我的django管理页面中,当我点击manufacturer1条目时,我希望能够通过say manufacturer1 manfuctred display_list。
我通过在制造商管理模型中使用Inline模型找到了一个技巧,问题是它加载了数据库中的每个条目,并且它需要一些时间,因为它是一个大表。
有没有其他方法可以做到这一点,还是我必须创建一个新模板?
修改 目标不是将每个FK的Car加载到Manufacturer1,就像使用InlineModelAdmin一样,而是获得与display_list相同的显示,并将结果分成页面
答案 0 :(得分:2)
回答您的最新问题:
采用ProxyModels
并覆盖ModelAdmin.queryset
您可以通过Car
,FordCar
扩展GMCar
模型,并在proxy=True
类中使用Meta
。
然后,您可以为FordCar
和GMCar
中的每一个注册单独的管理员,并覆盖每个ModelAdmin中的查询集方法,以过滤相应的制造商。
例如:
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)
答案 1 :(得分:1)
你不需要任何黑客攻击。只要您使用InlineModelAdmin权利并按预期使用,当您选择Manufacturer1时,Django admin仅显示具有FK至Manufacturer1的汽车。
答案 2 :(得分: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'获取灵感。
让Django docs on the Admin完整阅读。那里实际上有很多信息。