Django Rest Framework не может добавить вложенный obejct

Я совсем новичок в drf и пытаюсь отобразить вложенные объекты и одновременно иметь функцию выбора в ListCreateView

models.py

class CarBrand(SoftDeletionModel):
    CAR_BRAND_NAME_MAX_LEN = 30
    name = models.CharField(
        max_length=CAR_BRAND_NAME_MAX_LEN,
    )

    created_at = models.DateTimeField(
        auto_now_add=True,
    )

    def __str__(self):
        return self.name

class CarModel(SoftDeletionModel):
    CAR_MODEL_NAME_MAX_LEN = 30
    name = models.CharField(
        max_length=CAR_MODEL_NAME_MAX_LEN,
    )
    car_brand = models.ForeignKey(
       CarBrand,
       on_delete=models.CASCADE,
    )
    created_at = models.DateTimeField(
        auto_now_add=True,
    )
    updated_at = models.DateTimeField(
        auto_now=True,
    )

Моя логика заключается в том, чтобы иметь марки автомобилей и затем при создании новой модели автомобиля указывать существующую марку автомобиля

serializers.py

class FullCarBrandSerializer(serializers.ModelSerializer):
    class Meta:
        model = CarBrand
        fields = ('id', 'name', 'created_at')


class IdAndNameCarBrandSerializer(serializers.ModelSerializer):
    class Meta:
        model = CarBrand
        fields = ('id', 'name')


class FullCarModelSerializer(serializers.ModelSerializer):
    car_brand = IdAndNameCarBrandSerializer(many=False)

    class Meta:
        model = CarModel
        fields = ('id', 'name', 'created_at', 'updated_at', 'car_brand')

Когда у меня нет car_brand = IdAndNameCarBrandSerializer(many=False) часть создания с выбором марок автомобилей работает правильно correct_choices_img, но это не тот способ, которым я хочу отобразить JSON incorrect_nested_field_img (он показывает только id, но я хочу id и имя), однако, когда я добавляю ту же строку снова, я получаю то, что хочу в JSON, который выглядит так корректное_вложенное_поле_img, но функциональность выбора захватывающих марок автомобилей исчезает корректное_поле_img Я думаю, что он хочет, чтобы я создал новую марку с ним, но это не то, что я хочу

views.py

class CarModelListCreateView(api_views.ListCreateAPIView):
     queryset = CarModel.objects.all()
     serializer_class = FullCarModelSerializer

Вопрос Какой правильный способ отображения вложенных объектов и функциональность создания с выбором?

Я не очень хорошо разбираюсь в django, но я пытаюсь ответить на этот вопрос.

Для этого нужно просто :

Добавьте один класс в ваш serializers.py

serializers.py

...

class FullCarModelSerializer(serializers.ModelSerializer):
    car_brand = IdAndNameCarBrandSerializer(many=False)

    class Meta:
        model = CarModel
        fields = ('id', 'name', 'created_at', 'updated_at', 'car_brand')

class CreateCarModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = CarModel
        fields = ('id', 'name', 'car_brand')

Добавьте один метод к существующему классу представлений.

views.py

class CarModelListCreateView(api_views.ListCreateAPIView):
     queryset = CarModel.objects.all()
     serializer_class = FullCarModelSerializer

    def get_serializer_class(self):
        if self.request.method == 'POST':
            return CreateCarModelSerializer
        return FullCarModelSerializer

Вы можете обратиться к руководствам по api из Django rest framework.

serializer_class - Класс сериализатора, который должен использоваться для проверки и десериализации ввода, а также для сериализации вывода. Как правило, вы должны либо установить этот атрибут, либо переопределить метод get_serializer_class().

Вернуться на верх