Обработка данных для JSON и FormData в Angular
Так что я вроде как новичок в angular и django, но я пытаюсь создать веб-приложение, похожее на Amazon, где пользователь может войти в систему и просматривать различные объявления от других пользователей, создавать свои собственные объявления и выполнять основные операции CRUD над своими собственными объявлениями. При создании объявления пользователю необходимо добавить заголовок, описание, цену, местоположение, выбрать категорию и подкатегорию, добавить значения к атрибутам, а также прикрепить изображения в виде файлов. В базе данных категории и подкатегории имеют свои «атрибуты», значения которых также должны быть введены пользователем. Например, категория, скажем, «Домашние животные», будет иметь атрибут, скажем, «Возраст», а для подкатегории «Собака» будет атрибут «Порода». Я нашел в Интернете учебник по добавлению изображений, и в основном я отправляю их в виде файлов и сохраняю в папке на бэкенде. Когда я пытаюсь добавить листинг, все работает нормально, за исключением того, что атрибуты никогда не добавляются в базу данных. Я добавил несколько консольных журналов на фронт, чтобы увидеть, если я получаю их и отправляю как json, и я делаю, так что я думаю, что проблема в бэкэнд, поэтому я попытался добавить некоторые отпечатки на бэкэнд, чтобы попытаться увидеть, в чем проблема, и я думаю, что это из-за того, как FormData обрабатывает JSON
Я пробовал гуглить, Gemini, ChatGpt, Phind, ничего не помогло, так что вот он я Вот мой ts файл
и вот код бэкенда для создания объявления
Как вы можете видеть, я добавил несколько отпечатков для отладки, и при попытке создать листинг вот что напечатали эти отпечатки
я также попытался добавить листинг через swagger, и это сработало, вот как выглядит тело запроса в swagger
{
user_id* integer
title: User id
category* string
title: Category
minLength: 1
subcategory string
title: Subcategory
minLength: 1
x-nullable: true
title* string
title: Title
maxLength: 1024
minLength: 1
description* string
title: Description
minLength: 1
price* string($decimal)
title: Price
location string
title: Location
maxLength: 1024
x-nullable: true
attributes [ListingAttributeInput{
attribute_name* string
title: Attribute name
minLength: 1
value* string
title: Value
minLength: 1
}]
images [string($uri)
readOnly: true]
}
Любые советы, рекомендации, подсказки будут очень приветствоваться, спасибо заранее
Используйте вложенный сериализатор, например
class ListingAttributeInputSerializer(serializers.Serializer):
attribute_name = serializers.CharField()
value = serializers.CharField()
Парсинг json данных запроса также может быть проблемой в большинстве случаев с FormData. Попробуйте передавать их отдельно, например
parsed_data = json.loads(request.data['data'])
parsed_data = json.loads(request.data['data'])
parsed_data['images'] = request.FILES.getlist('images')