Reputation: 4435
i have in models.py
class Variants(Model):
class Meta:
db_table = 'variants'
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255, blank=False, null=False)
client = models.ForeignKey(Client, on_delete=models.CASCADE, null=False, blank=False)
created_at = models.DateField(auto_created=True, default=now, blank=True)
updated_at = models.DateField(auto_now=True, null=True, blank=True)
and
class VariantOptions(Model):
class Meta:
db_table = 'variant_options'
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255, blank=False, null=False)
variant = models.ForeignKey(Variants, on_delete=models.CASCADE, null=False, blank=False)
created_at = models.DateField(auto_created=True, default=now, blank=True)
updated_at = models.DateField(auto_now=True, null=True, blank=True)
and in serializers.py
class VariantOptionsSerializer(serializers.ModelSerializer):
class Meta:
model = models.VariantOptions
fields = ['name']
class VariantsSerializer(serializers.ModelSerializer):
options = VariantOptionsSerializer(many=True)
class Meta:
model = models.Variants
fields = ['name','client','options']
def create(self, validated_data):
options_data = validated_data.pop('options')
variant = models.Variants.objects.create(**validated_data)
for option_data in options_data:
models.VariantOptions.objects.create(variant=variant, **option_data)
return variant
and my view
class VariantsCreate(APIView):
permission_classes = (permissions.IsAuthenticated,)
serializer_class = serializers.VariantsSerializer
def post(self, request, format=None):
serializer = serializers.VariantsSerializer(data=request.data)
if serializer.is_valid():
saved = serializer.save()
return Response(serializer.data) ==> serializer.data gives error
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
i have this error
Got AttributeError when attempting to get a value for field
options
on serializerVariantsSerializer
. The serializer field might be named incorrectly and not match any attribute or key on theVariants
instance. Original exception text was: 'Variants' object has no attribute 'options'.
but the data has already been validated by the call to is_valid()
why return Response(serializer.data)
gives error ?
Upvotes: 1
Views: 642
Reputation: 577
Try to change
variant = models.ForeignKey(Variants, on_delete=models.CASCADE, null=False, blank=False)
with
variant = models.ForeignKey(Variants, related_name='options', on_delete=models.CASCADE, null=False, blank=False)
Upvotes: 2