如何在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
相关产品推荐
相关产品推荐

