У меня есть две модели, имеющие отношение многие ко многим, и я пытаюсь отправить вложенные данные в мой API.К сожалению, он возвращает мне только пустой массив.
Это то, что я пытаюсь:
мои модели:
class Building(models.Model):
name = models.CharField(max_length=120, null=True, blank=True)
net_leased_area = models.FloatField(null=True, blank=True)
class BuildingGroup(models.Model):
description = models.CharField(max_length=500, null=True, blank=True)
buildings = models.ManyToManyField(Building, default=None, blank=True)
Мое общее представление API:
class BuildingGroupCreateAPIView(CreateAPIView):
queryset = BuildingGroup.objects.all()
serializer_class = BuildingGroupSerializer
Мой сериализатор:
class BuildingGroupSerializer(serializers.ModelSerializer):
buildings = BuildingSerializer(many=True)
class Meta:
model = BuildingGroup
fields = (
'description',
'buildings',
)
def create(self, validated_data):
buildings_data = validated_data.pop('buildings')
building_group = BuildingGroup.objects.create(**validated_data)
for building_data in buildings_data:
Building.objects.create(building_group=building_group, **building_data)
return building_group
Когда я отправляю данные, он возвращает это:
{"description":"Test Description API","buildings":[]}
В массиве я хотел бы иметь свой массив словарей.
Я пытаюсь следовать документации REST здесь, когда перезаписываю метод create для отправки вложенного объекта.(https://www.django -rest-framework.org / api-guide / Relations / # writable-nested-serializers ), и я подумал, что я делаю это правильно, но эпическая ошибка.
Я отправляю данные с запросом с помощью моего пользовательского метода, например:
test_api_local(method="post", data={
"description": "Test Description API",
"buildings": [{'name' : 'Testname'}, .... ],
})
Любая помощь очень ценится.Большое спасибо !!
РЕДАКТИРОВАТЬ: Когда я пытаюсь проверить его в режиме REST, он говорит мне:
TypeError: 'building_group' is an invalid keyword argument for this function
EDIT2: Вот мой взгляд:
class BuildingGroupCreateAPIView(CreateAPIView):
queryset = BuildingGroup.objects.all()
serializer_class = BuildingGroupSerializer
def create(self, request, *args, **kwargs):
serializer = BuildingGroupSerializer(data=self.request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)