python string字符串转类属性

最近在用django时发现有时需要通过字符串获取类属性的值,还有就是通过字符串设置类属性的值

内置函数:地址

>>>class A(object):
...     bar = 1
... 
>>> a = A()
>>> getattr(a, 'bar')          # 获取属性 bar 值
1
>>> setattr(a, 'bar', 5)       # 设置属性 bar 值
>>> a.bar
5

主要是我想通过dict来设置model属性的值

# model.py

# 公众号用户信息
class WechatFollowersInfo(models.Model):
    subscribe = models.IntegerField('用户状态', default=0, choices=((0, '未关注'), (1, '已关注')))
    openid = models.CharField('用户openid', max_length=100, default='')
    nickname = models.CharField('用户昵称', max_length=50, null=True,default='')
    sex = models.IntegerField('用户性别', default=0, choices=((0, '未知'), (1, '男性'), (2, '女性')))
    sex = models.CharField('用户昵称', max_length=50, null=True,default='')
    city = models.CharField('城市', max_length=30, null=True,default='')
    country = models.CharField('国家', max_length=30, null=True,default='')
    province = models.CharField('省份', max_length=30, null=True,default='')
    language = models.CharField('语音', max_length=30, null=True,default='')
    headimgurl = models.URLField('用户头像', max_length=500, null=True,default='')
    subscribe_time = models.CharField('用户关注时间',max_length=30, null=True,default='') # 为时间戳。如果用户曾多次关注,则取最后关注时间
    unionid = models.CharField('unionid', max_length=50, null=True,default='')
    remark = models.CharField('备注', max_length=50, null=True,default='')
    groupid = models.CharField('分组ID', max_length=30, null=True,default='')
    tagid_list = models.CharField('标签ID', max_length=100, null=True,default='')
    subscribe_scene = models.CharField('关注来源',choices=choices.ADD_SCENE_ORIGIN, max_length=30, null=True,default='')
    qr_scene = models.CharField('扫码场景', max_length=100, null=True,default='')
    qr_scene_str = models.CharField('扫码场景描述', max_length=100, null=True,default='')

    class Meta:
        verbose_name = '公众号用户信息'  # 后台显示名称
        verbose_name_plural = verbose_name  # 表示复数


user_info = weixin_models.WechatFollowersInfo()
# 获取userinfo的openid属性
getattr(user_info, 'openid')
# 设置属性的值
setattr(user_info, 'openid',55)




同时我根据这个原理写了个dict对应到model属性的方法,可以直接设置属性的值,然后再save

 

def model_to_list_display(need_model, add_items=[], subtract_items=[]):
    '''*******使用此方法时,传递的need_model类不用使用三个"""来做注释,否则会获取到的是注释不是属性********
        need_model,     这个是需要生成的类
        add_items,      这个是需要增加的list列表
        subtract_items, 这个是需要减少的list列表
    '''
    ''' 这个方法主要是想一步生成list_display里面的元素,不用再一步一步的去敲''' \
        # 获取这个类的所有属性
    # print(need_model.__doc__)
    doc_str = need_model.__doc__
    content_str = doc_str.split('(', 1)[-1][:-1]
    content_list = content_str.split(', ')
    # 如果需要屏蔽不显示的字段,可以在list时操作
    for item in subtract_items:
        if item in content_list:
            content_list.remove(item)

    for item in add_items:
        content_list.append(item)

    # 返回值需要list转元组
    return tuple(content_list)

但是如果要用update_or_create方法的话,可以直接用字典来添加数据


user = client.user.get(openid)
logger_weixin.info(user)
print(type(user))
#user是dict    weixin_models.WechatFollowersInfo().objects.update_or_create(openid=openid,defaults=user)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值