编写原因
不知道大家在使用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}
思路解读:
- 首先, 我需要将前端请求的数据和模型字段拿交集, 这样获取到直接使用的数据.
- 接下来fields, exclude字段分别用来指定需要获取的字段的数据和需要排除的字段.
- 最后通过字段字典生成式,将最终数据返回.
- 大家可以再进行扩展, 指明data和filed的对应关系, 使这个工具方法更强大.
总结
这里主要实现用到了python集合的运算,是不是很简单的一个实现呢?小伙伴们如果有更好的方法, 欢迎留言学习.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。