170 похожих чатов

Всем привет, есть вопрос по drf допустим, надо принимать на вход

список массивов. Я не знаю изящных способов, которые работали бы, поэтому пишу вот такую дичь:
https://pastebin.com/iCv39aEf

Я практически уверен, что делаю неправильно. Интуитивно хотелось бы просто сделать так:
additions = ProductAdditionSerializer(write_only=True, many=True)
Но так не работает - в запросе, независимо от того, заполняешь поле или нет, пишет 'additions - это поле обязательно"

А как вы делаете?

19 ответов

6 просмотров

чот сложно, пока не вник) но additions = validated_data.pop('additions', None) можно чтобы не падало если нет ключа

Anton-Igin Автор вопроса

это не так важно насчет None, я в целом накидал просто Тут суть в том, что мы хотим сохранить за объектом сразу группу объектов привязанных, то есть в одном поле список массивов. Приходится прикручивать jsonfield и в его валидации уже использовать сериализатор

в целом не очень понятно почему не additions = ProductAdditionSerializer

Anton-Igin Автор вопроса

потому что он тогда не дает на вход подать этот additions. всегда пишет, будто поле не заполнено

можешь подробней описать, я не догоняю

Anton-Igin Автор вопроса

Вот код внутри: class ProductSerializer(serializers.ModelSerializer): ''' Сериализатор продукта ''' additions = ProductAdditionSerializer(write_only=True, many=True) class Meta: model = Product fields = '__all__' read_only_fields = ['price'] Вот код снаружи: def create_product(self): url = '{}/rest/products/'.format(self.root) print(url) with open('test_img.jpg', 'rb') as file_img: data = {'raw_price': 100, 'title': 'Особый продукт компании', 'description': 'dfg', 'category': 1, 'additions': [{'addition': 1, 'price': 100}], 'amount': 1, 'amount_measure': 'GRAM'} files = {'image': file_img} response = requests.post(url, data=data, files=files, headers=self.get_headers()) Ответ - {'additions': ['Обязательное поле.']}

еще больше запутал)) какая ошибка-то?

Anton-Igin Автор вопроса

Ответ - {'additions': ['Обязательное поле.']}

а дебагер что говорит? у меня просто не один сериализатор так написан и все работает без таких вот извращений

Anton-Igin Автор вопроса

дебагер говорит, в request.data добавки есть <QueryDict: {'raw_price': ['100'], 'title': ['Особый продукт компании'], 'description': ['dfg'], 'category': ['1'], 'additions': ["{'addition': 1, 'price': 100}"], 'amount': ['1'], 'amount_measure': ['GRAM'], 'image': [<InMemoryUploadedFile: test_img.jpg ()>]}>

это во вьюхе, а в ините сериалайзера?

кстати, вот в этом варианте деф криэйт такой же? а в деф апдейте предусмотрел?

Anton-Igin Автор вопроса

это я знаю, просто не делал его еще

Anton-Igin Автор вопроса

в общем в init в kwargs тот же словарик

а в валидации?

Anton-Igin Автор вопроса

<QueryDict: {'raw_price': ['100'], 'title': ['Особый продукт компании'], 'description': ['dfg'], 'category': ['1'], 'additions': ["{'addition': 1, 'price': 100}"], 'amount': ['1'], 'amount_measure': ['GRAM'], 'image': [<InMemoryUploadedFile: test_img.jpg ()>]}> Это initial_data

а дальше, там в криэйте и что там до этого?

Anton-Igin Автор вопроса

а до create не доходит, падает с ошибкой что нет additions

ну нужно найти функцию на которой падает и понять почему туда ключ из инита не дошел

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Can I forward ports (including the SSH port) between two machines without SSH? I know I can forward SSH server port from machine A (which blocks all requests by firewall) to ...
required optional
5
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
Карта сайта