python - Django Rest框架serializer.save()返回 "Invalid data. Expected a dictionary, but got group"

标签 python django django-rest-framework

我正在尝试调用 serlizerer 从 View 集中保存对象 这是views.py

class GroupViewSet(viewsets.ViewSet):
        ....
        @detail_route(methods=['post'], url_path='task')
        def get_task(self, request, pk=None):
            group = get_object_or_404(Group, pk=pk)
            data = {"group": group }
            log_serializer = LogSerializer(data=data)
            if log_serializer.is_valid(raise_exception=True):
                log_serializer.save()

这是序列化器.py

class GroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = Group
        fields = ('id', 'name')

class LogSerializer(serializers.ModelSerializer):
    group = GroupSerializer()
    class Meta:
        model = Log
        fields = ('group', 'created')

这是模型.py:

class Group:
....

class Log(models.Model):
    user = models.ForeignKey(User)
    group = models.ForeignKey(Server) #Not the group of user , it is the group id which user try to query 
    created = models.DateTimeField(auto_now_add=True)

帖子回复;

{
    "group": {
        "non_field_errors": [
            "Invalid data. Expected a dictionary, but got group."
        ]
    }
}

最佳答案

根据您的 LogSerializer,当您将数据属性传递给序列化器时,它需要一个如下所示的字典:

{
    // note this is a dictionary or a JSON Object.
    // id is omitted because it's auto-inserted natural key
    {
        'name': 'group-name'
    },
    'created': '2017-11-06 20:17:59'
}

但是,您传递了一个组实例,您可以从这里获取:group = get_object_or_404(Group, pk=pk)因此,当您调用 .is_valid 时,会引发异常.

假设您尝试使用组外键创建日志对象,对于现有组,快速破解将替换 data = {"group": group }data = {"group": group.__dict__ }

关于python - Django Rest框架serializer.save()返回 "Invalid data. Expected a dictionary, but got group",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47137382/

相关文章:

python - 如何使用 prefetch_related 获取 admin list_display 中自定义列的相关模型?

python - 如何在 Django 中跟踪用户 session 的长度

python - 覆盖Django RestFramework CreateModelMixin序列化器错误消息

django - djangorestframework-jwt 未提供身份验证凭据

django - 由于导入错误,无法运行 gunicorn

django - 在Django REST Framework中找不到资源时如何返回404

java - Python 相当于 Java 的 getClass().getFields()

python - 如何将具有空值的列转换为日期时间格式?

python - 为什么这个神经网络的损失总是 0.0 而准确率总是 1.0?

python - 计算文档数量