Вложенные отношения REST-сериализаторы - PullRequest
0 голосов
/ 26 сентября 2018

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__'

ответ:

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

мой ответ такой, но я не получаю связанный элемент поля в своем ответе.Кто-нибудь может подсказать, где я не прав.этот код возвращает ItemVariation поля объекта, но мне также нужен связанный элемент.

1 Ответ

0 голосов
/ 26 сентября 2018

Вы используете items в сериализаторе, и это item (без " s ") в вашей модели.

Итак, либо используйте source аргумент в качестве

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

ИЛИ
изменить items до item

class ItemVariationSerializer(serializers.ModelSerializer):
    <b>item</b> = ItemsSerializer(read_only=True)
    class Meta:
        model = ItemVariation
        fields ='__all__'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...