TypeError: Объект типа Vehicle не является сериализуемым в JSON
Когда я пытаюсь отфильтровать свою модель, я получаю эту ошибку:
TypeError: Object of type Vehicle is not JSON serializable
Моя модель:
class Vehicle(models.Model):
driver_id = models.ForeignKey(Driver,on_delete=CASCADE,unique=True,null=True, blank=True)
make = models.CharField(max_length=150)
model = models.CharField(max_length=150)
plate_number = models.CharField(max_length=10,validators = [validate_plate_numberLATIN,validate_plate_numberCYRYLLIC], unique=True)
created_at = models.DateTimeField(default=NOW)
updated_at = models.DateTimeField(default=NOW)
def __str__(self):
return self.make
мой вид get, который генерирует ошибку
def get(self,request, *args, **kwargs):
vehicles = Vehicle.objects.values('driver_id','make','model','plate_number','created_at','updated_at')
if request.GET.get('with_drivers') == 'yes':
vehicles = Vehicle.objects.exclude(driver_id__isnull=True)
data = {
'vehicles' : list(vehicles)
}
return JsonResponse(data)
Проблема, с которой вы столкнулись, связана с тем, что при фильтрации вы устанавливаете vehicles
в качестве отфильтрованного набора запросов. Когда вы вызываете list
на этом наборе запросов, вы получаете список Vehicle
моделей, которые не являются сериализуемыми.
Когда вы не фильтруете, вы получаете указанное values
, и это возвращает вам dict (который является сериализуемым).
Итак, вы можете просто получить значения после фильтрации:
def get(self,request, *args, **kwargs):
vehicles = Vehicle.objects.all()
if request.GET.get('with_drivers') == 'yes':
vehicles = vehicles.exclude(driver_id__isnull=True)
vehicles = vehicles.values(
'driver_id',
'make',
'model',
'plate_number',
'created_at',
'updated_at'
)
data = {
'vehicles' : list(vehicles)
}
return JsonResponse(data)