список массивов. Я не знаю изящных способов, которые работали бы, поэтому пишу вот такую дичь:
https://pastebin.com/iCv39aEf
Я практически уверен, что делаю неправильно. Интуитивно хотелось бы просто сделать так:
additions = ProductAdditionSerializer(write_only=True, many=True)
Но так не работает - в запросе, независимо от того, заполняешь поле или нет, пишет 'additions - это поле обязательно"
А как вы делаете?
чот сложно, пока не вник) но additions = validated_data.pop('additions', None) можно чтобы не падало если нет ключа
это не так важно насчет None, я в целом накидал просто Тут суть в том, что мы хотим сохранить за объектом сразу группу объектов привязанных, то есть в одном поле список массивов. Приходится прикручивать jsonfield и в его валидации уже использовать сериализатор
в целом не очень понятно почему не additions = ProductAdditionSerializer
потому что он тогда не дает на вход подать этот additions. всегда пишет, будто поле не заполнено
можешь подробней описать, я не догоняю
Вот код внутри: 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': ['Обязательное поле.']}
еще больше запутал)) какая ошибка-то?
Ответ - {'additions': ['Обязательное поле.']}
а дебагер что говорит? у меня просто не один сериализатор так написан и все работает без таких вот извращений
дебагер говорит, в 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 ()>]}>
это во вьюхе, а в ините сериалайзера?
кстати, вот в этом варианте деф криэйт такой же? а в деф апдейте предусмотрел?
это я знаю, просто не делал его еще
в общем в init в kwargs тот же словарик
а в валидации?
<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
а дальше, там в криэйте и что там до этого?
а до create не доходит, падает с ошибкой что нет additions
ну нужно найти функцию на которой падает и понять почему туда ключ из инита не дошел
Обсуждают сегодня