Здравствуйте. Помогите разобраться в DRF, пытаюсь написать простое апи с интерфейсом для пользователя (html/css)
Мой код view:
class CarCreate(APIView):
renderer_classes = [TemplateHTMLRenderer]
template_name = 'cars/newCar.html'
serializer_class = CarDetailSerializer
authentications_classes = (TokenAuthentication, )
permission_classes = (IsAuthenticated, )
def get(self, request):
return Response( template_name = 'cars/newCar.html',)
def post(self, request, *args, **kwargs):
queryset = Car.objects.create(user= request.user)
serializer = CarCreateSerializer(queryset, data=request.data)
if serializer.is_valid():
return Response({'serializer': serializer, 'queryset': queryset})
serializer.save()
return redirect('/api/v1/cars/usercars/')
Мой код serializers:
class CarCreateSerializer(serializers.ModelSerializer):
user = serializers.HiddenField(default=serializers.CurrentUserDefault())
class Meta:
model = Car
fields = '__all__'
def create(self, validated_data):
return Car.objects.create(**validated_data)
Моя модель машинки:
User = get_user_model()
class Car(models.Model):
vin = models.CharField(verbose_name = 'Вин', db_index = True, max_length = 64)
color = models.CharField(verbose_name="Цвет", max_length=64)
brand = models.CharField(verbose_name="Brand", max_length=64)
CAR_TYPES = (
(1, 'Седан'),
(2, 'Хэчбек'),
(3, 'Универсал'),
(4, 'Купе'),
)
car_type = models.IntegerField(verbose_name = 'Car_Type', choices=CAR_TYPES)
user = models.ForeignKey(User, verbose_name="Пользователь", on_delete=models.SET_NULL, null=True, blank=True)
Возвращает ошибку:
NOT NULL constraint failed: cars_car.car_type
Если во вьюхе указать car_type константой, то объект сохраняется, но остальные поля остаются пустыми, а car_type отображается. Как можно править данный код до рабочего состояния?
З.Ы.
До этого писал сериализер для правок таким образом:
class CarUpdate(serializers.ModelSerializer):
class Meta:
model = Car
fields = ('id', 'color', 'brand', 'car_type', 'vin')
def update(self, instance, validated_data):
instance.vin = validated_data.get('vin', instance.vin)
instance.car_type = validated_data.get('car_type', instance.car_type)
instance.brand = validated_data.get('brand', instance.brand)
instance.color = validated_data.get('color', instance.color)
instance.save()
return instance
Не знаю нужно ли делать нечто подобное для CarCreateSerializer или достаточно исправить вьюху.
Спасибо.