在多对多关系上放置/获取/删除请求

2024-09-28 21:55:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我对多对多关系上的一个直通表的PUT/GET/DELTE请求有问题,这些模型来自于检查一个预先存在的MySQL数据库

models.py

class Equipo(models.Model):
    idequipo = models.AutoField(db_column='idEquipo', primary_key=True)  
    marca = models.CharField(db_column='Marca', max_length=100, blank=True, null=True) 
    modelo = models.CharField(db_column='Modelo', max_length=100, blank=True, null=True) 
    class Meta:
        managed = False
        db_table = 'equipo'

class EquipoHasAtributo(models.Model):
    equipo_idequipo = models.ForeignKey(Equipo, models.DO_NOTHING, db_column='Equipo_idEquipo', primary_key=True)  
    atributo_idatributo = models.ForeignKey(Atributo, models.DO_NOTHING, db_column='Atributo_idAtributo')  
    descripcion = models.CharField(db_column='Descripcion', max_length=100, blank=True, null=True)  

    class Meta:
        managed = False
        db_table = 'equipo_has_atributo'
        unique_together = (('equipo_idequipo', 'atributo_idatributo'),)

class Atributo(models.Model):
    idatributo = models.AutoField(db_column='idAtributo', primary_key=True)
    nombre = models.CharField(db_column='Nombre', max_length=45, blank=True, null=True)  
    estado = models.IntegerField(db_column='Estado') 

    class Meta:
        managed = False
        db_table = 'atributo'

序列化程序.py

class EquipoHasAtributoSerializer(serializers.ModelSerializer):
    equipo_idequipo=serializers.PrimaryKeyRelatedField(many=False, read_only=False, queryset=Equipo.objects.all())
    class Meta:
        model=EquipoHasAtributo
        fields=['equipo_idequipo','atributo_idatributo','descripcion']

这是我对单个记录的GET请求的“解决方案”,否则它将抛出“多个记录”错误或“不可删除列表”错误

views.py

class Equipo_Atributo_Detail(generics.RetrieveUpdateDestroyAPIView):
    queryset=EquipoHasAtributo.objects.all()
    serializer_class=EquipoHasAtributoSerializer
    lookup_url_kwarg=['pk,pk2']
    def get_object(self):
        pk=self.kwargs['pk']
        pk2=self.kwargs['pk2']
        return EquipoHasAtributo.objects.get(equipo_idequipo=pk,atributo_idatributo=pk2)

url.py

path('Equipos_Atributos/<int:pk>/<int:pk2>/',views.Equipo_Atributo_Detail.as_view()),

现在,PUT请求问题:

当我试图通过PUT请求修改单个记录时,让我们假设记录“1-2” 当它试图插入新记录而不是更新现有记录时,将抛出错误“键“PRIMARY”的重复条目“1-2”

当我试图删除一条记录时,假设记录为“1-2”,它实际上会删除带有1的所有组合

ej: 1,2

1,3

1,6


Tags: falsetruedbmodels记录columnclasspk