#python #django
#python #django
Вопрос:
Я использую Django REST Framework, я застрял во вставке связанных данных о продукте в несколько таблиц. Пожалуйста, ознакомьтесь со сценарием ниже:
В AddProductSerializer
, я хочу снова вставить цикл variations for в часть else во вложенном сериализаторе django, чтобы я мог сохранить все данные, связанные с таблицей продуктов.
Данные Json
{
"category": 15,
"images": [
{"image_url": "https://images/1607679352290_0f32f124a14b3e20db88e50da69ad686.jpg", "main_image": true},
{"image_url": "https://images/1607679352290_0f32f124a14b3e20db88e50da69ad686.jpg", "main_image": false}
],
"keywords": "related keywords",
"long_description": "<p>l</p>",
"mrp_price": "120",
"selling_price": "908",
"short_description": "<p>k</p>",
"sku": "Sam-009",
"stock": "7",
"title": "Samsung",
"have_variations": true,
"variant": "Size-Color",
"slug": "samsung-phone",
"variations": [
{
"image_url": "https://images/607679417554_0f32f124a14b3e20db88e50da69ad686.jpg",
"mrp_price": 68,
"selling_price": 86786,
"sku": "iuy",
"stock": 68768,
"title": "hkj",
"color": {
"name": "red"
},
"size": {
"name": 9
}
},
{
"image_url": "https://images/607679434082_0392bab5c6a3ec64552ea57aa69852a5.jpg",
"mrp_price": 67,
"selling_price": 6876,
"sku": "hkjh",
"stock": 868,
"title": "yiui",
"color": {
"name": "blue"
},
"size": {
"name": 9
}
}
]
}
Serializer.py
# List images
class ImageSerializer(serializers.ModelSerializer):
class Meta:
model = Image
fields = ('image_url', 'main_image',)
# List variations
class VariationSerializer(serializers.ModelSerializer):
class Meta:
model = Variation
fields = ('title', 'stock', 'mrp_price', 'selling_price',)
# List sizes
class SizeSerializer(serializers.ModelSerializer):
class Meta:
model = Size
fields = ('name',)
# List sizes
class ColorSerializer(serializers.ModelSerializer):
class Meta:
model = Color
fields = ('name',)
# Add products
class AddProductSerializer(serializers.ModelSerializer):
images = ImageSerializer(many=True)
size = SizeSerializer(many=True, required=False)
color = ColorSerializer(many=True, required=False)
variations = VariationSerializer(many=True)
class Meta:
model = Product
fields = '__all__'
def create(self, validated_data):
images = validated_data.pop('images')
variations = validated_data.pop('variations')
product = Product.objects.create(**validated_data)
for image in images:
Image.objects.create(product=product, **image)
if validated_data['have_variations']:
if validated_data['variant'] == 'Size':
for variation in variations:
size = Size.objects.create(name=variation['size'])
Variation.objects.create(product=product, size=size, **variation)
elif validated_data['variant'] == 'Color':
for variation in variations:
color = Color.objects.create(name=variation['color'])
Variation.objects.create(product=product, color=color, **variation)
else:
for variation in variations:
size = variation.pop('size')
size_id = Size.objects.create(**size)
color = variation.pop('color')
color_id = Color.objects.create(**color)
Variation.objects.create(product=product, size=size_id, color=color_id, **variation)
return product
Комментарии:
1. Но в чем проблема, с которой вы столкнулись? Вы получаете какую-либо ошибку?
2. Ошибка ключа для ‘size’, я не могу указать размер в цикле variations и то же самое для цвета
3. Пожалуйста, поделитесь трассировкой ошибок.
4. Я добавил ссылку с фотографией ошибки выше.