python - 类型不正确。预期的 pk 值,收到的指令。 Django Rest 框架 - Vue

标签 python django vue.js

我是 Django 和 Django Rest Framework 的新手。这是我想做的一个小项目来提高我的技能,但我已经被困在这里很多时间了。

ViewSets.py

from rest_framework import viewsets, filters
from .models import Plazo, Perfil, Solicitud, Estatus
from .serializers import (PlazoSerializer, PerfilSerializer, 
SolicitudSerializer, EstatusSerializer, 
SolicitudExpandeSerializer)


class PlazoViewSet(viewsets.ModelViewSet):
    queryset = Plazo.objects.all()
    serializer_class = PlazoSerializer


 class EstatusViewSet(viewsets.ModelViewSet):
     queryset = Estatus.objects.all()
     serializer_class = EstatusSerializer


 class PerfilViewSet(viewsets.ModelViewSet):
     queryset = Perfil.objects.all()
     serializer_class = PerfilSerializer


class SolicitudViewSet(viewsets.ModelViewSet):
    queryset = Solicitud.objects.all()
    serializer_class = SolicitudSerializer

    def get_serializer_class(self):
        serializer_class = self.serializer_class

        if self.action in ['list', 'retrieve']:
            serializer_class = SolicitudExpandeSerializer

        return serializer_class

序列化器.py

from rest_framework import serializers
from .models import Plazo, Perfil, Solicitud, Estatus


class PlazoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Plazo
        fields = '__all__'


class EstatusSerializer(serializers.ModelSerializer):
    class Meta:
        model = Estatus
        fields = '__all__'


class PerfilSerializer(serializers.ModelSerializer):
    class Meta:
        model = Perfil
        fields = '__all__'


class SolicitudSerializer(serializers.ModelSerializer):

    class Meta:
        model = Solicitud
        fields = '__all__'


class SolicitudExpandeSerializer(SolicitudSerializer):

    perfil = PerfilSerializer(many=False, read_only=False)
    status = EstatusSerializer(many=False, read_only=False)

模型.py

from django.db import models


class Plazo(models.Model):
    plazo_id = models.AutoField(primary_key=True)
    nombre = models.CharField(max_length=100)
    meses = models.IntegerField()
    intereses = models.IntegerField()

    def __str__(self):
        return self.nombre

    class Meta:
        verbose_name = 'plazo'
        verbose_name_plural = 'plazos'


class Perfil(models.Model):
    perfil_id = models.AutoField(primary_key=True)
    nombre = models.CharField(max_length=250)

    def __str__(self):
        return self.nombre

    class Meta:
        verbose_name = 'perfil'
        verbose_name_plural = 'perfiles'


class Estatus(models.Model):
    nombre = models.CharField(max_length=250)

    def __str__(self):
        return str(self.nombre)

    class Meta:
        verbose_name = 'estatus'
        verbose_name_plural = 'estatus'


class Solicitud(models.Model):

    ACEPTADO, PENDIENTE, RECHAZADO = range(1, 4)

    ESTADOS = (
        (ACEPTADO, 'Aceptado'),
        (PENDIENTE, 'Pendiente'),
        (RECHAZADO, 'Rechazado')
    )

    solicitud_id = models.AutoField(primary_key=True)
    monto = models.IntegerField()
    tarjeta_de_credito = models.BooleanField(default=False)
    plazo = models.ForeignKey(Plazo, related_name='SolicitudPlazo', blank=True, null=True, on_delete=models.PROTECT)
    perfil = models.ForeignKey(Perfil, related_name='SolicitudPerfil', blank=True, null=True, on_delete=models.PROTECT)
    status = models.ForeignKey(Estatus, related_name='SolicitudEstatus', blank=True, null=True, on_delete=models.PROTECT)
    total = models.IntegerField(blank=True, null=True)
    mostrar = models.BooleanField(default=True)

    def __str__(self):
        return str(self.solicitud_id)

    class Meta:
        verbose_name = 'solicitud'
        verbose_name_plural = 'solicitudes'

JS

    updateSolicitud: function() {
     this.loading = true;
     this.$http.put(`/api/solicitud/${this.currentSolicitud.solicitud_id}/`, 
     this.currentSolicitud)
            .then((response) => {
              this.loading = false;
              this.currentSolicitud = response.data;
              this.getSolicitudes();
            })
            .catch((err) => {
              this.loading = false;
              console.log(err);
            })
      }

当我尝试更新记录时出现此错误。我试过从输入中传递“Perfil”值,但它仍然无法识别它并创建了一个字典。

"{"perfil":["Incorrect type. Expected pk value, received dict."],"status":["Incorrect type. Expected pk value, received dict."]}"

最佳答案

只把它放在这里,因为这是 HitTest 门的搜索结果,但我遇到的情况是我有一个嵌套序列化器

我能够通过将字段名称添加到 Meta 类的 exclude 属性来解决这个问题,因为我不需要那个字段的结果来为特定的序列化器序列化。

例如:

class SolicitudSerializer(serializers.ModelSerializer):

    class Meta:
        model = Solicitud
        exclude = ('field_name', )

关于python - 类型不正确。预期的 pk 值,收到的指令。 Django Rest 框架 - Vue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53275269/

相关文章:

python - 我需要一个 numpy 数组中的 N 个最小(索引)值

python - 如何拆分字符串中的两个项目?

django - 如何将 JSON 对象从 Django 传递给 FullCalendar(通过序列化模型)?

javascript - Vue.js 更新组件中嵌套 props 同步对象的值

javascript - 页面打开时表单自动提交

python - 在 python 3 中使用 boto

python - python 中 globals() 和 locals() 的奇怪行为

mysql - 将 MySQL DB 版本 5.6 迁移到 5.5 (Django) 结构转储导入失败

python - 为什么 web2py 没有更容易被采用?

html - 如何使用 bootstrap 在我的表单右上角之外放置一个 div?