Python中如何使用**kwargs实现适配不同参数的数据库模型创建通用函数
现有代码问题
你当前的实现无法满足需求:代码中直接使用kwargs['字段名']的方式强制取值,只要调用时没有传入对应的参数,就会直接抛出KeyError异常,完全达不到适配不同参数数量的效果。
最优实现方案
Python本身支持关键字参数解包语法,且Django ORM的create方法原生支持接收任意符合模型字段定义的关键字参数,未传入的字段会自动使用字段配置的默认值(没有配置默认值则用NULL填充,符合你字段允许为null的前提),不需要手动逐个指定字段:
def create(**kwargs): # 直接解包传入的参数即可,不需要写死任何字段 DBMODEL.objects.create(**kwargs)
可选健壮性优化
如果需要避免调用时传入模型不存在的字段导致ORM报错,可以增加一步合法字段过滤逻辑,不需要写任何if判断:
def create(**kwargs): # 获取当前模型所有合法字段名 allowed_fields = {field.name for field in DBMODEL._meta.get_fields()} # 过滤掉所有非法参数 valid_kwargs = {k: v for k, v in kwargs.items() if k in allowed_fields} DBMODEL.objects.create(**valid_kwargs)
以上方案完全符合你的要求:单个函数即可适配任意数量的合法参数传入,不需要写硬编码的字段取值逻辑,也不需要任何if else分支判断。
内容的提问来源于stack exchange,提问作者CodeMonkey
相关产品推荐
相关产品推荐

