美文网首页
mongoengine的get_*_display()方法

mongoengine的get_*_display()方法

作者: 蒋狗 | 来源:发表于2016-12-20 11:32 被阅读0次

    在使用mongoengine操作mongodb时,利用Field的get_*_display()方法快速显示。
    定义model时需要制定Field的choices。

    # mongoengine 0.11.0
    from mongoengine import connect, Document
    from mongoengine import IntField, StringField
    connect('default-db')
    
    # 定义一些常量
    USER_STATUS_ACTIVE = 1
    USER_STATUS_INACTIVE = 0
    USER_STATUS_LIST = [(USER_STATUS_ACTIVE, u'启用'), (USER_STATUS_INACTIVE, u'禁用')]
    JIANGSU_CODE = 'JS'
    SHANGHAI_CODE = 'SH'
    PROVINCE_CODE_LIST = [(JIANGSU_CODE, '江苏'), (SHANGHAI_CODE, '上海')]
    
    # 定义一个User model
    class User(Document):
        name = StringField(max_length=50, default='')  # 用户名
        province = StringField(choices=PROVINCE_CODE_LIST)  # 城市
        status = IntField(
            choices=USER_STATUS_LIST, default=USER_STATUS_INACTIVE)  # 用户状态
    
    
    # 准备数据
    # User.objects.delete()
    
    for i in range(1, 10):
        name = 'JiangW' + str(i)
        status = 0
        if i % 2 == 0:
            status = 1
        province = JIANGSU_CODE if i > 3 else SHANGHAI_CODE
        User(name=name, status=status, province=province).save()
    
    # 查询并输出数据
    user_list = User.objects.all()
    for user in user_list:
        print(user.name, user.status, user.get_status_display(),
            user.province, user.get_province_display())
    # JiangW1 0 禁用 SH 上海
    # JiangW2 1 启用 SH 上海
    # JiangW3 0 禁用 SH 上海
    # JiangW4 1 启用 JS 江苏
    # JiangW5 0 禁用 JS 江苏
    # JiangW6 1 启用 JS 江苏
    # JiangW7 0 禁用 JS 江苏
    # JiangW8 1 启用 JS 江苏
    # JiangW9 0 禁用 JS 江苏
    

    此时利用get_*_display能够快速的根据数据库中存放的user.status从所指定的choices,即USER_STATUS_LIST中获取所需的中文字符串展示,province同理。

    但在项目中使用的是mongoengine旧版本0.10.5,在使用get_*_display()方法时出现如下问题。
    在User.objects.all()时,所获得的get_*_display()数据异常,输出时将最后一个元素的值代替了所有元素的值。

    user_list = User.objects.all()
    for user in user_list:
        print(user.name, user.status, user.get_status_display(),
            user.province, user.get_province_display())
    # JiangW1 0 禁用 SH 江苏
    # JiangW2 1 禁用 SH 江苏
    # JiangW3 0 禁用 SH 江苏
    # JiangW4 1 禁用 JS 江苏
    # JiangW5 0 禁用 JS 江苏
    # JiangW6 1 禁用 JS 江苏
    # JiangW7 0 禁用 JS 江苏
    # JiangW8 1 禁用 JS 江苏
    # JiangW9 0 禁用 JS 江苏
    

    利用下标取值正常。

    user_list = User.objects.all()
    for index, user in enumerate(user_list):
        print(user.name, user.status, user_list[index].get_status_display(),
            user.province, user_list[index].get_province_display())
    

    相关文章

      网友评论

          本文标题:mongoengine的get_*_display()方法

          本文链接:https://www.haomeiwen.com/subject/ubuxvttx.html