重定向到 Django Admin 中的过滤列表

Ani*_*nda 5 django django-admin

假设我有一个 modelA 和 modelB,它们与 modelA 有外键关系

在 Django Admin 中的任何 modelA 对象页面上,我希望有一个链接到与该 modelA 实例有关系的 modelB 实例的筛选列表。

例如:

从/admin/my_app/modelA/1/change/,我想访问/admin/my_app/modelB/?modelA__id__exact=1。

Ris*_*nha -2

要创建管理更改视图的完整 URL(包括过滤器):

  1. 反转网址

根据https://docs.djangoproject.com/en/4.2/ref/contrib/admin/#reversing-admin-urls中的列表 ,您可以从模型和应用程序标签动态创建 URL。

这是模式:{{ app_label }}_{{ model_name }}_changelist

在你的情况下:

# in models.py
class MyModel(Model):
    # you're model fields

# in admin.py in some Admin class
model_cls = MyModel
change_url = reverse(f'admin:{model_cls._meta.app_label}_{model_cls._meta.model_name}_changelist')
Run Code Online (Sandbox Code Playgroud)
  1. 添加过滤器参数

与所有常规reverse()调用一样,将参数添加到kwargs关键字参数列表中。

在更改列表中,搜索参数为q。

在 admin.py 中定义搜索字段:

   search_fields = ['modelA__id__exact']
Run Code Online (Sandbox Code Playgroud)

然后获取像这样的url:

change_url = reverse('admin:myapp_modelb_change', kwargs={'q': 1})
Run Code Online (Sandbox Code Playgroud)