Я пишу пример программы, где теги могут быть добавлены в todolist. Поэтому я создал образцы тегов. Но когда у меня возникли проблемы с добавлением этого в сериализатор Todo.Как отправить данные POST в вложенный Serializer Django Rest Framework?
Вот сериализаторы, которые я написал.
class TagSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(required=False, max_length=100)
def create(self, validated_data):
return Tag.objects.create(**validated_data)
class LocationSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
latitude = serializers.CharField(max_length=100)
longitude = serializers.CharField(max_length=100)
def create(self, validated_data):
return Location.objects.create(**validated_data)
class ToDoSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
work_id = serializers.CharField(max_length=100)
tags = TagSerializer(many=True)
location = LocationSerializer()
Я попытался отправить данные в сериализатор ToDo в качестве POST. Но как я могу отправить данные о местоположении и тегах в представление API.
APIView
class ToDoList(APIView):
def post(self, request, format=None):
serializer = ToDoSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Как я могу передать данные, как POST в ToDoList. Должен ли я писать пользовательские сообщения на ToDoSerializer?
Модель
class Tag(models.Model):
name = models.CharField(max_length=100)
class Location(models.Model):
latitude = models.CharField(max_length=100)
longitude = models.CharField(max_length=100)
class ToDo(models.Model):
work_id = models.CharField(max_length=100)
tags = models.ManyToManyField(Tag)
location = models.ForeignKey(Location)
Как получить теги, которые уже созданы? –
serializer.create get вызывается и возвращает экземпляр модели. Таким образом, вы получаете следующие задачи: 'instance.tags_set.all()' - имя по умолчанию для такой пары моделей. Но вы должны переписать это, предоставив 'related_name' для ManyToManyField. –