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().