在接口通讯里经常遇到这种需求,需要将对象的字段名和值均传至接口,
user = User.objects.get(id=1)
笨方法1,没错,我这样写过:
di = {}
di['username'] = user.username
di['email'] = user.email
...... # 诸多赋值
笨方法2,没错,我也这样写过:
di = {}
all_fields = User._meta.get_all_field_names()
special_fields = ['is_active', 'is_stuff']
for i in special_fields:
try:
all_fields.remove(i)
except:
pass
for field in all_fields:
di[field] = getattr(user, field)
!!!正确的方法,翻源码时遇到的,最喜欢这种命名,看名字就知道了怎样用和返回值,看到它时又感觉django暖暖的,很贴心~:
from django.forms.models import model_to_dict
di = model_to_dict(user, exclude=['is_active', 'is_stuff'])
源码:def model_to_dict(instance, fields=None, exclude=None):
参数instance是对象实例,fields是指定需要哪些字段,exclude是指定排除哪些字段,exclude比fields优先级高。
相关文章
- 12-27python遍历并获取对象属性--dir(),__dict__,getattr,setattr
- 12-27Python数据类型--字典(dict)
- 12-27Python开发【源码剖析】 Dict对象
- 12-27axios——post请求时把对象obj数据转为formdata格式
- 12-27python基础(8):基本数据类型三(dict)、is和==、编码和解码
- 12-27Python3基本数据类型之dict
- 12-27python-Scapy-创建数据包并显示导致> NoneType对象没有属性“ route” <
- 12-27将模型对象转换为json字典:model_to_dict
- 12-271.6 python数据类型之dict类
- 12-27Python数据类型的内置函数之tuple(元组),dict(字典),set(集合)