Chtěl bych uložit nějaký data v jednom z mých pole databáze. Data je přidán do tohoto pole při rekonstrukci s POST metodou. Později, když chci zobrazit data s metodou GET nechci, že jedno pole, které mají být prezentovány.
Když jsem si PŘÍSPĚVKU jsem se rekonstruovat tento řetězec:
{
"car_id": 3,
"rating": 3
}
Později v views.py
Dělám rekonstrukci zatímco PŘÍSPĚVEK:
@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)
A tam je můj 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)
Kód dělá to funguje (nějak). Teď tam mohou být přidány sazby pro jedno auto (více sazeb) s POST moethods. Já obchodě sazby v CarRate třídy a později bude použita pro výpočet průměrné sazby pro auto. Já jen prostě nechci, aby ji vytisknout se DOSTAT.
Tohle je můj výstup právě teď:
{
"id": 2,
"make": "Volkswagen",
"model": "Golf",
"rates": [
4,
4,
2,
3
],
"avg_rating": 0.0
},
Jednoduše chci rates
pole, které mají být neviditelné, zatímco tisk.
Četl jsem o defer()
metoda a vyzkoušel, ale nic se nestalo. Žádnou pomoc?
write_only
dělá přesně to, co chci, akorát jsem nechtěl skrývatrating
alerates
. Ta věc sextra_kwargs
nefunguje v CarSerializer, ale myslím, že kvůliread_only
nastavit na True v sazby variabilní. Změnil jsem towrite_only
a to dělá to samé, co jste napsal. Lekce se dozvěděl, díky!