You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Admin反向Inline选项过滤:仅展示applicable=False的Test对象

解决方案

你需要重写TestInlineAdmin的formfield_for_foreignkey方法实现过滤,原因是你当前使用的Inline绑定的是多对多关系的中间表,中间表内关联Test的字段是外键类型而非多对多类型,因此之前重写formfield_for_manytomany不会被触发。

实现代码:

class TestInlineAdmin(admin.TabularInline):
    model = Test.questions.through
    extra = 0  

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        # 匹配中间表中指向Test模型的外键字段
        if db_field.name == "test":
            # 过滤仅展示applicable=False的Test对象
            kwargs["queryset"] = Test.objects.filter(applicable=False)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

说明:

  1. 此方法会直接修改新增/编辑关联条目时Test下拉框的可选范围,同时不会影响已关联条目的正常展示
  2. 如果你的中间表中指向Test的外键字段名不是默认的test,请将代码中的db_field.name == "test"替换为实际的字段名
  3. 你之前遇到的AttributeError: 'dict' object has no attribute 'widget'报错,是因为错误配置了formfield_overrides参数(比如给字段类型赋值的字典缺少widget属性),使用上述方案不需要配置formfield_overrides,也无需自定义完整Inline表单。

内容的提问来源于stack exchange,提问作者Tomasz Szkudlarek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:36:02