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

如何在sqladmin的form_ajax_refs表单中设置Null值?

解决方案

方法一:通过form_overrides和form_args配置字段

直接在TokenAdmin中覆盖created_by字段的配置,添加允许空值的参数:

from sqladmin import ModelAdmin
from sqladmin.forms import AjaxSelectField
from your_app.models import Token, User

class TokenAdmin(ModelAdmin, model=Token):
    # 保留原有AJAX搜索配置
    form_ajax_refs = {
        "created_by": {
            "fields": ["id", "username", "account"],
            "order_by": "id"
        }
    }
    
    # 覆盖字段类型为支持空值的AJAX选择框
    form_overrides = {
        "created_by": AjaxSelectField
    }
    
    # 配置字段参数,开启空值支持
    form_args = {
        "created_by": {
            "model": User,
            "fields": ["id", "username", "account"],
            "order_by": "id",
            "allow_blank": True,  # 核心:允许选择空值
            "blank_text": "-- 清空用户关联 --"  # 自定义空选项的显示文本
        }
    }

方法二:自定义完整表单类

如果需要更灵活的控制,可以自定义表单类并指定给TokenAdmin:

from sqladmin import ModelAdmin
from sqladmin.forms import ModelForm, AjaxSelectField
from your_app.models import Token, User

class TokenForm(ModelForm):
    class Meta:
        model = Token
    
    # 重写created_by字段,添加空值支持
    created_by = AjaxSelectField(
        model=User,
        fields=["id", "username", "account"],
        order_by="id",
        allow_blank=True,
        blank_text="-- 清空用户关联 --"
    )

class TokenAdmin(ModelAdmin, model=Token):
    form = TokenForm

关键注意点

  • 确保Token模型中的created_by字段本身允许为Null(比如SQLAlchemy中定义为relationship(..., nullable=True),对应数据库字段设置允许空值),否则前端选择空值后后端会抛出验证错误。
  • allow_blank=True会在AJAX选择框顶部添加空选项,用户选择后即可将关联设为Null。

内容的提问来源于stack exchange,提问作者Vitaliy Dmitriev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:49:53