在 Django 管理模型中传输 QuerySet

Transfer the QuerySet in Django AdminModel

我正在尝试通过我的排序来引用另一个模型。

query = Cars.objects.filter(task_id__exact=obj.task_id, 
                            engine__isnull=False).values_list('engine', flat=True)
engines_ids_list=list(query)

link = reverse("admin:auto_engines_changelist") + f"?id={engines_ids_list}"
                                                               ^
                                                         Not work, it's example

?engine_id=1&engine_id=2 使用最后一个参数 (engine_id=2) 显示对象,而不是 2 个对象..

仅工作Engines.objects.filter(pk__in=engines_ids_list)

如何将此过滤器发送到引擎更改列表页面?

您可以将 task_id 作为参数传递给 url。

link = reverse("admin:auto_engines_changelist") + f"?task_id={task_id}"

然后您可以在 Engines Modeladmin 的 get_queryset() 方法中访问 {task_id} 值。

def get_queryset(self, request):
    queryset = super().get_queryset(request)

    task_id = request.GET.get('task_id')
    if task_id is not None:
        engine_ids = Cars.objects.filter(task_id__exact=task_id, engine__isnull=False).values_list('engine', flat=True)
        queryset = queryset.filter(id__in=engine_ids)
    return queryset