Me gustaría almacenar algunos datos en uno de mi campo de base de datos. Los datos se agregan a ese campo, mientras que la deserialización con el método POST. Más tarde, cuando quiero mostrar los datos con el método GET no quiero que un campo para ser presentado.
Cuando hago POST me deserializar que la cadena:
{
"car_id": 3,
"rating": 3
}
Más tarde en views.py
Hago la deserialización POST:
@api_view(['POST'])
def car_rate(request):
if request.method == 'POST':
rate_data = JSONParser().parse(request)
rate_serializer = CarRateSerializer(data=rate_data)
if rate_serializer.is_valid():
try:
car_obj = Car.objects.get(pk=rate_data['car_id'])
except Car.DoesNotExist:
return JsonResponse({'message': 'The car with given ID does not exist!'}, status=status.HTTP_404_NOT_FOUND)
# check if rate is from 1 to 5
r = rate_serializer.validated_data['rating']
if int(r) >= 1 and int(r) <= 5:
rate_serializer.save()
return JsonResponse({'message':'The rate is in the scope!'})
else:
return JsonResponse({'message':'The rate is NOT in the scope!'})
return JsonResponse(rate_serializer.errors)
Y no es mi models.py
:
class Car(models.Model):
make = models.CharField(max_length=15)
model = models.CharField(max_length=15)
avg_rating = models.FloatField(default=0)
def __str__(self): # print it when Car instance is needed
return self.make
class CarRate(models.Model):
car_id = models.ForeignKey(Car, related_name='rates',
on_delete=models.CASCADE,
default=0)
rating = models.PositiveIntegerField(default=0)
El código no funciona (de alguna manera). Por ahora no puede ser añadido tasas para un coche (de varios tipos) con el POST moethods. Puedo almacenar las tasas CarRate en la clase y más tarde será utilizado para calcular la tasa promedio para un coche. Yo simplemente no querer imprimir con GET.
Esta es mi salida ahora mismo:
{
"id": 2,
"make": "Volkswagen",
"model": "Golf",
"rates": [
4,
4,
2,
3
],
"avg_rating": 0.0
},
Simplemente quiero que el rates
campo para ser invisible durante la impresión.
He leído acerca de defer()
método y lo probé, pero no pasó nada. Alguna ayuda?
write_only
hace exactamente lo que yo quiero, excepto que yo no quiero ocultarrating
perorates
. La cosa conextra_kwargs
no trabajo en CarSerializer, pero creo que es porque deread_only
establece en True en las tasas de variable. He cambiado que awrite_only
y lo hace de la misma lo que usted escribió. Lección aprendida, gracias!