我是 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/