【问题标题】:Python / DRF - error when trying to serialize a dictionaryPython / DRF - 尝试序列化字典时出错
【发布时间】:2019-08-26 17:02:26
【问题描述】:

我有以下字典:

<type 'dict'>: {u'user2': {'username': u'user2', 'problems_attempts_last_week': None, 'videos_last_week': None, 'correct_problems_last_week': None, 'videos_overall': None, 'problems_overall': None, 'problems_attempts_overall': None, 'correct_problems_overall': None, 'forum_posts_last_week': 2, 'forum_posts_overall': 13, 'date_last_active': datetime.datetime(2019, 8, 23, 0, 0, tzinfo=<UTC>), 'problems_last_week': None}, 
u'user3': {'username': u'user3', 'problems_attempts_last_week': None, 'videos_last_week': None, 'correct_problems_last_week': 6, 'videos_overall': None, 'problems_overall': 18, 'problems_attempts_overall': 3, 'correct_problems_overall': 15, 'forum_posts_last_week': None, 'forum_posts_overall': None, 'date_last_active': datetime.datetime(2019, 8, 23, 0, 0, tzinfo=<UTC>), 'problems_last_week': 6}, 
u'user1': {'username': u'user1', 'problems_attempts_last_week': 4, 'videos_last_week': 1, 'correct_problems_last_week': None, 'videos_overall': 3, 'problems_overall': 8, 'problems_attempts_overall': 4, 'correct_problems_overall': 4, 'forum_posts_last_week': 2, 'forum_posts_overall': 2, 'date_last_active': datetime.datetime(2019, 8, 23, 0, 0, tzinfo=<UTC>), 'problems_last_week': 4}}

还有下面的序列化器:

class UserEngagementSerializer(serializers.Serializer):
    """
    Serializes row data
    """
    username = serializers.CharField()
    videos_overall = serializers.IntegerField()
    videos_last_week = serializers.IntegerField()
    problems_overall = serializers.IntegerField()
    problems_last_week = serializers.IntegerField()
    correct_problems_overall = serializers.IntegerField()
    correct_problems_last_week = serializers.IntegerField()
    problems_attempts_overall = serializers.IntegerField()
    problems_attempts_last_week = serializers.IntegerField()
    forum_posts_overall = serializers.IntegerField()
    forum_posts_last_week = serializers.IntegerField()
    date_last_active = serializers.DateTimeField(format=settings.DATE_FORMAT)

当我尝试从我的 REST 服务返回结果时,显示以下错误:

AttributeError:尝试获取值时出现 AttributeError 序列化程序UserEngagementSerializer 上的字段username。这 序列化器字段可能命名不正确并且不匹配任何 unicode 实例上的属性或键。原始异常文本 是:“unicode”对象没有属性“用户名”。

当我返回一个直接的 Django 查询集时,这个序列化程序起作用了。如何使它与字典一起使用?

【问题讨论】:

    标签: python django django-rest-framework django-serializer


    【解决方案1】:

    我强烈建议你升级到 python3

    serializer = UserEngagementSerializer(u['user2'])
    print(serializer.data)
    

    【讨论】:

      【解决方案2】:

      这是因为 Python 将“用户名”值视为 unicode。这可能是由您从中检索数据的来源引起的。在将字典传递给序列化程序之前,您需要确保将键“用户名”的值编码为 UTF-8 或 ASCII:

      dict["username"].encode("utf-8")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 2017-11-09
        相关资源
        最近更新 更多