【问题标题】:Data doesn't change after sending PUT method发送 PUT 方法后数据不变
【发布时间】:2020-11-12 08:09:28
【问题描述】:

我正在使用 python django 做一些基本的 CRUD 应用程序。基本上,我想从前端发送一些原始文本数据,后端会捕获它,然后重新发送清理过的数据。 目前,clean 方法有效,但由于某种原因,它仍然向前端发送相同的原始文本。

这是我的代码:

在models.py中:

class Post(models.Model):
    content = models.TextField(max_length=3000, blank=False, default='')

在 serializers.py 中:

class PostSerializer(serializers.ModelSerializer):

class Meta:
    model = Post
    fields = ('id', 'content')

在views.py中:

@api_view(['PUT'])
def create_post(request):
    if request.method == 'PUT':
        post_data = JSONParser().parse(request)
        post_serializer = PostSerializer(data = post_data)
        if post_serializer.is_valid():
            data_to_clean= str(post_serializer.data['content']) # this is raw text (i.e: "aBcD")
            cleaned = clean(data_to_clean) # this is text after cleaning (i.e: "abcd")
            post_serializer.data['content'] = cleaned # update the new text
            return JsonResponse(post_serializer.data, status = status.HTTP_200_OK)
        return JsonResponse(post_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

你能指出这段代码有什么问题吗?非常感谢。

【问题讨论】:

  • 我猜你需要打电话给post_serializer.update()

标签: python django


【解决方案1】:

post_serializer 是不可变的,您无法更改,您必须创建它的精确副本,然后您才能进行操作

from django.http import QueryDict
@api_view(['PUT'])
def create_post(request):
    if request.method == 'PUT':
        post_data = JSONParser().parse(request)
        post_serializer = PostSerializer(data = post_data)
        if post_serializer.is_valid():
            data_to_clean= str(post_serializer.data['content']) # this is raw text (i.e: "aBcD")
            cleaned = clean(data_to_clean) # this is text after cleaning (i.e: "abcd")
            query_dict = QueryDict('', mutable=True)
            query_dict.update(post_serializer.data)
            query_dict.data['content'] = cleaned # update the new text
            return JsonResponse(query_dict.data, status = status.HTTP_200_OK)
        return JsonResponse(query_dict.errors, status=status.HTTP_400_BAD_REQUEST)

【讨论】:

  • 感谢您的回复。我会尽快试一试
  • 嗨,suresh,我试过你的代码,但似乎 QueryDict 对象没有属性“数据”
  • 我找到了!如果我们只输入“query_dict['content'] =...”,它将像一个魅力一样工作。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 2018-04-18
相关资源
最近更新 更多