首页 > 解决方案 > 如何过滤foreign_key表单的列表并更改Django admin中的显示名称?

问题描述

我知道如果我覆盖该方法,我可以获取ForeignKey基于查询集过滤的添加/更改表单中的表单中显示的值列表。get_form但是我怎样才能更改这些字段的显示名称?我知道我可以使用formfield_for_foreignkey方法,但是我没有对象来过滤查询集。我不能同时使用两者,因为一个会覆盖另一个。

def get_form(self, request, obj=None, **kwargs):
    form = super().get_form(request, obj, **kwargs)
    value = ...  #some value used for filtering
    form.base_fields['some_field'].queryset = (
        MyModel.objects.filter(other_field=value)
                       .order_by('name')
    )

    return form

此外,当我使用get_form过滤的查询集时,如果我正在访问 change_form 页面,即使我正在编辑的模型实例具有它的值,该字段也是空白的。有什么想法吗?

参考:formfield_for_foreignkey

标签: djangodjango-modelsdjango-formsdjango-admin

解决方案


推荐阅读