提出请求不更新Data-django

发布于 2025-01-31 03:51:02 字数 2297 浏览 2 评论 0原文

我正在使用邮递员来获取我的请求。我的获取和帖子似乎工作正常。只有当我使用数据更新数据时,我才遇到打ic的位置。 Postman实际上将数据发送回去,就好像对象正在更新一样,但是当我去检查时,该数据与以前相同的数据。我已经尝试将Hive数据添加到序列化器中。但是它告诉我我添加了太多参数。

model.py

class Inspection(models.Model):
     hive = models.ForeignKey(Hive, on_delete=models.CASCADE)
     user = models.ForeignKey(User,on_delete=models.CASCADE)
     eggs = models.IntegerField()
     larvae = models.IntegerField()
     sealed_brood = models.IntegerField()
     covered_bees = models.IntegerField()
     nectar_honey = models.IntegerField()
     pollen = models.IntegerField()
     pest_spotted = models.CharField(max_length=200)
     pest_action = models.CharField(max_length=200)
     notes_concerns = models.CharField(max_length=300)

serializers.py

class InspectionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Inspection
        fields = ['id', 'eggs', 'larvae', 'sealed_brood', 'covered_bees', 'nectar_honey', 'nectar_honey', 'pollen', 'pest_spotted', 'pest_action', 'notes_concerns','user_id','hive','hive_id']
        depth = 1

    hive_id = serializers.IntegerField(write_only=True)

views.py

@api_view(['GET', 'POST','PUT'])
@permission_classes([IsAuthenticated])
def inspection_details(request, pk):
    hive = get_object_or_404(Hive, pk=pk)
    inspection = Inspection.objects.filter(hive_id = hive.id, user=request.user)
    if request.method == "GET":
        serializer = InspectionSerializer(inspection, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)
        
    elif request.method == 'POST':
        serializer = InspectionSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save(user=request.user)
            return Response(serializer.data,status.HTTP_200_OK)
    
    
    elif request.method == 'PUT':
        serializer = InspectionSerializer(hive, data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save(user=request.user)
            return Response(serializer.data, status=status.HTTP_200_OK)

I am using Postman to get my request. My GET and POST appear to be working fine. It's only when I go to update the data with PUT that its where I am running into the hiccup. Postman actually sends data back as if the object is being updated, but when I go to check via GET it's the same data as before. I have tried adding the hive data to the serializer.save, but it tells me I'm adding too many parameters.

models.py

class Inspection(models.Model):
     hive = models.ForeignKey(Hive, on_delete=models.CASCADE)
     user = models.ForeignKey(User,on_delete=models.CASCADE)
     eggs = models.IntegerField()
     larvae = models.IntegerField()
     sealed_brood = models.IntegerField()
     covered_bees = models.IntegerField()
     nectar_honey = models.IntegerField()
     pollen = models.IntegerField()
     pest_spotted = models.CharField(max_length=200)
     pest_action = models.CharField(max_length=200)
     notes_concerns = models.CharField(max_length=300)

serializers.py

class InspectionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Inspection
        fields = ['id', 'eggs', 'larvae', 'sealed_brood', 'covered_bees', 'nectar_honey', 'nectar_honey', 'pollen', 'pest_spotted', 'pest_action', 'notes_concerns','user_id','hive','hive_id']
        depth = 1

    hive_id = serializers.IntegerField(write_only=True)

Views.py

@api_view(['GET', 'POST','PUT'])
@permission_classes([IsAuthenticated])
def inspection_details(request, pk):
    hive = get_object_or_404(Hive, pk=pk)
    inspection = Inspection.objects.filter(hive_id = hive.id, user=request.user)
    if request.method == "GET":
        serializer = InspectionSerializer(inspection, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)
        
    elif request.method == 'POST':
        serializer = InspectionSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save(user=request.user)
            return Response(serializer.data,status.HTTP_200_OK)
    
    
    elif request.method == 'PUT':
        serializer = InspectionSerializer(hive, data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save(user=request.user)
            return Response(serializer.data, status=status.HTTP_200_OK)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

π浅易 2025-02-07 03:51:02

我认为实例变量不正确,它应该是检查不是Hive

@api_view(['GET', 'POST', 'PUT'])
@permission_classes([IsAuthenticated])
def inspection_details(request, pk):
    hive = get_object_or_404(Hive, pk=pk)
    inspection = Inspection.objects.filter(hive_id = hive.id, user=request.user)
    ...
    elif request.method == 'PUT':
        serializer = InspectionSerializer(inspection, data=request.data)   # here
        if serializer.is_valid(raise_exception=True):
            serializer.save(user=request.user)
            return Response(serializer.data, status=status.HTTP_200_OK)

I think the instance variable is not correct, it should be inspection not hive.

@api_view(['GET', 'POST', 'PUT'])
@permission_classes([IsAuthenticated])
def inspection_details(request, pk):
    hive = get_object_or_404(Hive, pk=pk)
    inspection = Inspection.objects.filter(hive_id = hive.id, user=request.user)
    ...
    elif request.method == 'PUT':
        serializer = InspectionSerializer(inspection, data=request.data)   # here
        if serializer.is_valid(raise_exception=True):
            serializer.save(user=request.user)
            return Response(serializer.data, status=status.HTTP_200_OK)
仙气飘飘 2025-02-07 03:51:02

首先,如果iS_valid子句,请不要使用。无论如何,它都会提高例外,因此如果不需要。

接下来,您需要更新序列化器,而不是保存它。

 elif request.method == 'PUT':
    serializer = InspectionSerializer(hive, data=request.data)
    serializer.is_valid(raise_exception=True)
    serializer.update(object_to_update,serializer.validated_data)
    # if you want to return updated serialized data :
    updated_serializer = InspectionSerializer(object_to_update)
    return Response(updated_serializer.data, status=status.HTTP_200_OK)
    

First of all don't use if clause for is_valid. it raise exception anyway so if is not needed.

Next you need to update your serializer not saving it.

 elif request.method == 'PUT':
    serializer = InspectionSerializer(hive, data=request.data)
    serializer.is_valid(raise_exception=True)
    serializer.update(object_to_update,serializer.validated_data)
    # if you want to return updated serialized data :
    updated_serializer = InspectionSerializer(object_to_update)
    return Response(updated_serializer.data, status=status.HTTP_200_OK)
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文