user10309179
user10309179

Reputation:

Nested relationships REST serializers

models.py

class Item(models.Model):
    name=models.CharField(max_length=500)
    short_description=models.CharField(max_length=500)
    restaurant=models.ForeignKey(Restaurant,on_delete=models.CASCADE)
    def __str__(self):
        return str(self.name)

class ItemVariation(models.Model):
    restaurant=models.ForeignKey(Restaurant,on_delete=models.CASCADE)
    item=models.ForeignKey(Item,on_delete=models.CASCADE)
    price=models.IntegerField(blank=True,null=True,default=0)
    item_code=models.CharField(max_length=500)
    keyword= models.ManyToManyField(Keyword)
    image=models.ImageField(upload_to='dishes/', blank=True, null=True)

    def __str__(self):
        return str(self.id)

serializers.py

class ItemsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields =('name','short_description')

class ItemVariationSerializer(serializers.ModelSerializer):
    items = ItemsSerializer(many=True, read_only=True)
    class Meta:
        model = ItemVariation
        fields ='__all__'

response:

{
                "id": 7,
                "price": 0,
                "item_code": "test",
                "image": "/media/dishes/download_3_kcE78IS.jpeg",
                "restaurant": 1,
                "item": 7,
                "keyword": [
                    3
                ]
            }

my response is like this but i'm not getting related field item in my response. can anyone suggest where i'm wrong. this code is returning ItemVariation object fields but i also need related item.

Upvotes: 0

Views: 39

Answers (1)

JPG
JPG

Reputation: 88689

You're using items in serializer and it's item (without "s") in your model.

So, either use source argument as

class ItemVariationSerializer(serializers.ModelSerializer):
    items = ItemsSerializer(read_only=True, source='item')
    class Meta:
        model = ItemVariation
        fields ='__all__'

OR
change items to item

class ItemVariationSerializer(serializers.ModelSerializer):
    item = ItemsSerializer(read_only=True)
    class Meta:
        model = ItemVariation
        fields ='__all__'

Upvotes: 1

Related Questions