使用 django 删除多对多关系时出现 500 错误

问题描述 投票:0回答:0

我正在构建一个具有多对多关系的小型应用程序,名为“river_rapid”。我可以在前端的河道详情视图中看到快速卡片,但不确定我是否正确“获取”了它们。我最终试图删除关系(从河流详细信息中删除快速卡而不完全删除快速卡),并且之前一直遇到“未绑定本地”错误(因此注释掉代码)。

在尝试了几种方法来解决该错误后,我现在收到以下错误:

randrapi.models.rapid.Rapid.DoesNotExist: Rapid matching query does not exist.
[05/Mar/2023 22:02:15] "DELETE /rapids/11 HTTP/1.1" 500 98330

这是我的 river_rapid 视图和模型:

from django.http import HttpResponseServerError
from rest_framework.viewsets import ViewSet
from rest_framework.response import Response
from rest_framework import serializers, status
from randrapi.models import River_Rapid, River, Rapid

class RiverRapidView(ViewSet):
  
  def retrieve(self, request, pk):
    river_rapid = River_Rapid.objects.get(pk=pk)
    # river = River.objects.get(pk=pk)

    serializer = RiverRapidSerializer(river_rapid)
    print('retrieve')
    return Response(serializer.data)
  
  def list(self, request):
    # river = River.objects.all()
    # print(river)
    river_rapids = River_Rapid.objects.all()
    # print(river_rapids)
    # new_river_rapids = river_rapids.filter(river_id = river)
    # new_river_rapids = River_Rapid.objects.all()

    # new_river_rapids = request.query_params.get = ('river_rapids', None)
    # if new_river_rapids is not None:
    # new_river_rapids = river_rapids.filter(river_id = river)
    # print(new_river_rapids)

    # if new_river_rapids is not None:
    #  river = river.filter(river = river)
    
    # global new_river_rapids
    
    river = request.query_params.get('river', None)
    new_river_rapids = river_rapids.filter(river_id = river)

    if river is not None:
      # new_river_rapids = river_rapids.filter(river_id = river)
      print(new_river_rapids)
    serializer = RiverRapidSerializer(new_river_rapids, many = True)

    return Response(serializer.data)
  
  def create(self, request):
    river = River.objects.get(pk=request.data["river"])
    rapid = Rapid.objects.get(pk=request.data["rapid"])
    
    river_rapid = River_Rapid.objects.create(
      river = river,
      rapid = rapid
    )
    serializer = RiverRapidSerializer(river_rapid)
    return Response(serializer.data)
  
  def update(self, request, pk):
    river_rapid = River_Rapid.objects.get(pk=pk)
    
    river = River.objects.get(pk=request.data["river"])
    rapid = Rapid.objects.get(pk=request.data["rapid"])
    
    river_rapid.river = river
    river_rapid.rapid = rapid
    river_rapid.save()
    
    return Response(None, status=status.HTTP_204_NO_CONTENT)
  
  def destroy(self, request, pk):
    river_rapid = River_Rapid.objects.get(pk=pk)
    river_rapid.delete()
    return Response(None, status=status.HTTP_204_NO_CONTENT)
  
class RiverRapidSerializer(serializers.ModelSerializer):
  
  class Meta:
    model = River_Rapid
    fields = ('river', 'rapid', 'id')
    depth = 1
from django.db import models
from .river import River
from .rapid import Rapid

class River_Rapid(models.Model):
  
  river = models.ForeignKey(River, on_delete=models.CASCADE)
  rapid = models.ForeignKey(Rapid, on_delete=models.CASCADE)
  
def __str__(self):
  return self.name

我已经尝试专门针对 river_rapid,我检查了我的 views/river_rapid 文件中的 destroy 和 list 方法以查看我丢失了什么,并收到 500 错误。

django many-to-many django-rest-viewsets react-fullstack delete-method
© www.soinside.com 2019 - 2024. All rights reserved.