django-rest-framework - Django中嵌套JSON的序列化
问题描述
class GrossenSerializer(serializers.Serializer):
artikelNr1 = serializers.IntegerField()
artikelNr2 = serializers.IntegerField()
artikelGr = serializers.IntegerField()
groessenText = serializers.CharField()
sku = serializers.CharField()
istZl = serializers.IntegerField()
verkPeriode = serializers.IntegerField()
def validate(self, attrs):
return super(GrossenSerializer, self).validate(attrs)
class CategoriesRootsSerializer(serializers.Serializer):
id = serializers.IntegerField()
name = serializers.CharField()
parentCategoryId = serializers.IntegerField()
def validate(self, attrs):
return super(CategoriesRootsSerializer, self).validate(attrs)
class CategoriesSerializer(serializers.Serializer):
id=serializers.IntegerField()
name=serializers.CharField(max_length=50)
parentCategoryId=serializers.IntegerField()
categoryRoots = serializers.ListField(child=CategoriesRootsSerializer(many=True, read_only=True))
def validate(self, attrs):
return super(CategoriesSerializer, self).validate(attrs)
sku=serializers.CharField(max_length=50, allow_blank=True)
artikelNr1=serializers.IntegerField()
artikelNr2=serializers.IntegerField()
StatusCode=serializers.IntegerField(required=False)
statusText=serializers.CharField(max_length=50, allow_blank=True)
SaisonRetourenCode=serializers.IntegerField(required=False)
saisonRetourenText=serializers.CharField(max_length=50, allow_blank=True)
saisonCode=serializers.IntegerField()
saisonText=serializers.CharField(max_length=50, allow_blank=True)
geschlechtCode=serializers.IntegerField()
geschlechtText=serializers.CharField(max_length=50, allow_blank=True)
RayonCode=serializers.IntegerField(required=False)
rayonText=serializers.CharField(max_length=50)
warenArtCode=serializers.IntegerField()
warenArtText=serializers.CharField(max_length=50)
wuCode=serializers.IntegerField()
wuText=serializers.CharField(max_length=50)
waCode=serializers.IntegerField()
warenGruppe=serializers.CharField(max_length=50, allow_blank=True)
alterCode=serializers.IntegerField()
farbe=serializers.CharField(max_length=50)
material=serializers.CharField(max_length=50)
bezeichnung=serializers.CharField(max_length=50)
pictureName=serializers.CharField(max_length=50)
picturePathLocal=serializers.CharField(max_length=50)
kollektion=serializers.CharField(max_length=50, allow_blank=True)
comCode=serializers.CharField(max_length=50)
lieferant=serializers.CharField(max_length=50)
eKchf=serializers.FloatField()
eti=serializers.FloatField()
vp=serializers.FloatField()
groessenCode=serializers.IntegerField()
groessen=GrossenSerializer(many=True, read_only=True)
zlQty=serializers.IntegerField()
productId=serializers.IntegerField()
published=serializers.BooleanField()
categories=CategoriesSerializer(many=True, read_only=True)
productName=serializers.CharField(max_length=50)
shortDescription=serializers.CharField(max_length=150)
fullDescription=serializers.CharField()
flag=serializers.CharField(allow_blank=True)
def validate(self, attrs):
return super(RecommendationJsonSerializer, self).validate(attrs)
在一个视图中,我通过这样的 Get 方法调用它
if request.method == 'GET':
for json in jsonList:
data = json
data['author'] = request.user.pk
serializer = RecommendationJsonSerializer(data=data)
data = {}
print(serializer.is_valid())
if serializer.is_valid():
print(serializer.error_messages)
return Response(data=data)
我收到这个错误
{'required': 'This field is required.', 'null': 'This field may not be null.', 'invalid': 'Invalid data. Expected a dictionary, but got {datatype}.'}
我正在尝试序列化的输入 JSON
{'artikelNr1': 133198, 'artikelNr2': 0, 'sku': '133198.00', 'statusCode': 4, 'statusText': 'Manuell Bewirtschaftung', 'saisonRetourenCode': 0, 'saisonRetourenText': 'unbestimmt', 'saisonCode': 0, 'saisonText': 'SAISON', 'geschlechtCode': 1, 'geschlechtText': 'UNISEX', 'rayonCode': 0, 'rayonText': '<RAYON>', 'warenArtCode': 6600, 'warenArtText': 'ACCESSOIRES/DIV.', 'wuCode': 66, 'wuText': 'ACCESSOIRES/DIV.', 'waCode': 6, 'warenGruppe': 'DESSOUS', 'alterCode': 20164, 'farbe': 'BLACK', 'material': 'PLASTIC', 'bezeichnung': "'METRO BOUTIQUE GIFTCARD' CHF20", 'pictureName': 'art_133198_00.jpg', 'picturePathLocal': 'p:\\', 'kollektion': '', 'comCode': 'METRO BOUTIQUE GESCHENKKARTE CHF 20', 'lieferant': '...', 'eKchf': 0, 'eti': 20, 'vp': 20, 'groessenCode': 0, 'groessen': [{'artikelNr1': 133198, 'artikelNr2': 0, 'artikelGr': 1, 'groessenText': 'os', 'sku': '133198.00.01', 'istZl': 463, 'verkPeriode': -268}], 'zlQty': 463, 'productId': 82482, 'published': True, 'categories': [{'categoryRoots': [{'id': 1, 'name': 'Damen', 'parentCategoryId': 0}, {'id': 188, 'name': 'Geschenkkarten', 'parentCategoryId': 1}], 'id': 188, 'name': 'Geschenkkarten', 'parentCategoryId': 1}, {'categoryRoots': [{'id': 2, 'name': 'Herren', 'parentCategoryId': 0}, {'id': 186, 'name': 'Geschenkkarten', 'parentCategoryId': 2}], 'id': 186, 'name': 'Geschenkkarten', 'parentCategoryId': 2}, {'categoryRoots': [{'id': 3, 'name': 'Mädchen', 'parentCategoryId': 0}, {'id': 183, 'name': 'Geschenkkarten', 'parentCategoryId': 3}], 'id': 183, 'name': 'Geschenkkarten', 'parentCategoryId': 3}, {'categoryRoots': [{'id': 4, 'name': 'Jungen', 'parentCategoryId': 0}, {'id': 180, 'name': 'Geschenkkarten', 'parentCategoryId': 4}], 'id': 180, 'name': 'Geschenkkarten', 'parentCategoryId': 4}, {'categoryRoots': [{'id': 1, 'name': 'Damen', 'parentCategoryId': 0}, {'id': 376, 'name': 'Bekleidung', 'parentCategoryId': 1}, {'id': 21, 'name': 'Fanshop', 'parentCategoryId': 376}], 'id': 21, 'name': 'Fanshop', 'parentCategoryId': 376}, {'categoryRoots': [{'id': 2, 'name': 'Herren', 'parentCategoryId': 0}, {'id': 411, 'name': 'Bekleidung', 'parentCategoryId': 2}, {'id': 32, 'name': 'Fanshop', 'parentCategoryId': 411}], 'id': 32, 'name': 'Fanshop', 'parentCategoryId': 411}], 'productName': 'Giftcard', 'shortDescription': 'Giftcard - Schwarz + Gelb', 'fullDescription': "<p>Metro Geschenkkarte - die perfekte Geschenkidee für alle Gelegenheiten<br />Dient als komfortables Zahlungsmittel in sämtlichen Metro Boutique Filialen und in unserem Online-Shop<br />Die Geschenkkarte kann in jeder Filiale aufgeladen werden<br /><span style='color:red'><span style='color:red'>Nicht retournierbar!</span></span></p>", 'flag': '', 'author': 1}
这是我试图提供给这个序列化程序的输入 JSON 是否有人知道我做错了什么......
解决方案
推荐阅读
- tableau-api - Tableau 选项卡视图
- spring - Spring boot:Feign客户端休息调用不适用于oauth2,但可以在浏览器上使用
- firebase - 大量离开时优化 Firebase 查询
- haskell - 使用 case 表达式 Haskell 进行递归
- javascript - 单击提交后,如何重定向到 js 组件并通过 php 向 db 发送信息?
- python - Python:如何使用函数和 Tkinter GUI 设置循环?
- python - Python(Pyspark)嵌套列表reduceByKey,Python列表追加创建嵌套列表
- python - LSTM model doesn't predict values higher than certain value (not same value all the time)
- python - Reshaping arrays using Numpy.Reshape
- c - Address operator on big endian system