簡體   English   中英

PUT 請求不更新數據-Django

[英]PUT Request not Updating data-Django

我正在使用 Postman 來獲取我的請求。 我的 GET 和 POST 似乎工作正常。 只有當我用 PUT 更新數據時,我才會遇到問題。 郵遞員實際上將數據發回,就好像對象正在更新一樣,但是當我通過 GET 進行檢查時,它與以前的數據相同。 我嘗試將配置單元數據添加到 serializer.save,但它告訴我我添加了太多參數。

模型.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)

序列化程序.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)

視圖.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)

我認為實例變量不正確,應該是inspection而不是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)

首先不要對 is_valid 使用 if 子句。 無論如何它都會引發異常,因此不需要。

接下來,您需要更新您的序列化程序而不是保存它。

 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)
    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM