编写原因

不知道大家在使用django orm中get_or_create或者update_or_create的时候是不是经常是这个样子:

XXXX.objects.get_or_create(xx=xx, default={
    xx1=xx1,
    xx2=xx2,
    ...
})

如果数据表的字段足够的多, 那么default中的字典会很长很长, 不仅写起来麻烦, 而且显得视图篇幅很长, 所以我就在想怎样可以简化这个操作.

解决问题

有了这个想法, 我第一时间想到了django中model_to_dict, 不知道小伙伴还有没有印象, 我在之前的专门写过一篇介绍的, 有需要可以去看一下, 废话不多说, 先上代码:

def data2modeldict(data, model=None, fields=None, exclude=None):
    _fields = data.keys() & {f.name for f in model._meta.fields}
    if fields:
        _fields = set(fields) & _fields
    if exclude:
        _fields = _fields - set(exclude)

    return {f: data[f] for f in _fields}

思路解读:

  1. 首先, 我需要将前端请求的数据和模型字段拿交集, 这样获取到直接使用的数据.
  2. 接下来fields, exclude字段分别用来指定需要获取的字段的数据和需要排除的字段.
  3. 最后通过字段字典生成式,将最终数据返回.
  4. 大家可以再进行扩展, 指明data和filed的对应关系, 使这个工具方法更强大.

总结

这里主要实现用到了python集合的运算,是不是很简单的一个实现呢?小伙伴们如果有更好的方法, 欢迎留言学习.


二十一
1.4k 声望867 粉丝

无论遇到多大的困难,你总是能扛过去,坚持一件事,对自己