python - 序列化程序返回 "Model object"而不是特定字段

标签 python django django-rest-framework

我有一个问题。我正在使用 Django REST 框架创建一个 API,我创建了序列化程序来返回食谱和配料来 cooking 它。

模型.py:

class Recipes(models.Model):
        title = models.CharField(max_length=50,null=True, blank=False, verbose_name=('name'))

class Tag(models.Model):
        name = models.CharField(max_length=50,null=True, blank=False, verbose_name=('name'))

class ListTag(models.Model):
        recipes = models.ForeignKey(Recipes, blank=False, on_delete=models.CASCADE, related_name='recipes')
        tag = models.ForeignKey(Tag, blank=False, on_delete=models.CASCADE, related_name='tag')

我有类 RecipesTag(成分)和 ListTag 是包含每种成分和收据 ID 的列表。

序列化器.py

class RecipesSerializer(serializers.ModelSerializer):
    ingredient = serializers.StringRelatedField(many=True, read_only=True, source='recipes')
    class Meta:
        model = Recipes
        fields = ('title', 'ingredient')

class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag

class ListTagSerializer(serializers.ModelSerializer):
    tag = serializers.SlugRelatedField(
        read_only=True,
        slug_field='name'
     )
    class Meta:
        model = ListeTag
        fields = ('recipes','tag')

结果

对于RecipesSerializer

{
    "title": "Pancakes à la canadienne",
    "ingredient": [
        "ListTag object",
        "ListTag object",
        "ListTag object"
    ]
}

但是我想要

{
    "title": "Pancakes à la canadienne",
    "ingredient": [
         {
             "id": 2,
             "name": "milk"
         },
         {
             "id": 3,
             "name": "rice"
         },
         {
             "id": 4,
             "name": "salade"
         },
         {
             "id": 5,
             "name": "tomato"
         }
    ]
}

{
    "title": "Pancakes à la canadienne",
    "ingredient": ["milk","rice","salade","tomato"]
}

最佳答案

您可以使用嵌套关系来做到这一点,例如:

class RecipesSerializer(serializers.ModelSerializer):
    recipes = ListTagSerializer(many=True,read_only=True)
    class Meta:
        model = Recipes
        fields = ('title', 'recipes')

class ListTagSerializer(serializers.ModelSerializer):
    id = serializers.ReadOnlyField(source='tag.id')
    tag = serializers.SlugRelatedField(
        read_only=True,
        slug_field='name'
    )
    class Meta:
        model = ListeTag
        fields = ('id','tag')

了解有关嵌套关系的更多信息 here

关于python - 序列化程序返回 "Model object"而不是特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465544/

相关文章:

Django REST框架: Create/Update object using Related Field

python - 断言错误: Cannot apply DjangoModelPermissionsOrAnonReadOnly on a view that does not set `.queryset` or have a `.get_queryset()` method

django - 在模板中带参数的函数。 Django

javascript - Django 设计模式 - 在加载时填充客户端 JavaScript 变量的方法

python - DRF 序列化器深度使字段在创建时被忽略

python - pyclustering : intended method of initializing kmeans

javascript - django 复选框是或否

python - 我正在尝试从 python 正则表达式解析字符串 - 无法获得所需的输出

python 看门狗 : Is there a way to pause the observer?

python - 如何从 NumPy 矩阵中的列而不是行中减去?