Django Rest Framework的贯穿模型问题

贡萨洛·丹布拉

当我列出Recipe对象时会发生这种情况试图尽可能做到这里,我没有得到任何错误,但我得到的响应是,如下:

# response of Recipe.objects.all()
[
    {
        "user": 1,
        "name": "sandwich",
        "ingredients": [
            {},
            {}
        ],
        "created": "2021-01-11T00:47:04.932071-03:00",
        "modified": "2021-01-11T00:47:04.932167-03:00"
    }
]

当模型是:

class Recipe(models.Model):
    user = models.ForeignKey('users.User', on_delete=models.CASCADE, null=False)
    name = models.CharField(blank=False, max_length=50)
    ingredients = models.ManyToManyField('recipes.Ingredient', through='recipes.IngredientComposition')
    # some other fields...

class Ingredient(BaseModel):
    name = models.CharField(blank=False, max_length=25, unique=True
                            error_messages={'unique': 'Ingredient already exists'})

class IngredientComposition(models.Model):    
    ingredient = models.ForeignKey('Ingredient', on_delete=models.CASCADE, null=False)
    recipe = models.ForeignKey('recipes.Recipe', on_delete=models.CASCADE, null=False)
    quantity = models.DecimalField(max_digits=21, decimal_places=3, null=False, default=1)

及其序列化器:

class RecipeSerializer(serializers.ModelSerializer):
    ingredients = IngredientCompositionSerializer(read_only=True, many=True)
    class Meta:
        model = Recipe
        fields = ['user', 'name', 'ingredients', 'created', 'modified']

class IngredientSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ingredient
        fields = ['name', 'created', 'modified']

class IngredientCompositionSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.ReadOnlyField(source='ingredient.name')
    class Meta:
        model = IngredientComposition
        fields = ['name', 'quantity']

预期的响应是:

[
    {
        "user": 1,
        "name": "sandwich",
        "ingredients": [
            {"name": "bread", "quantity": 2.0},
            {"name": "cheese", "quantity": 3.0}
        ],
        "created": "2021-01-11T00:47:04.932071-03:00",
        "modified": "2021-01-11T00:47:04.932167-03:00"
    }
]

我想念什么?

阿什温地带

添加相关名称 recipe

class IngredientComposition(models.Model):    
    ingredient = models.ForeignKey('Ingredient', on_delete=models.CASCADE, null=False)
    recipe = models.ForeignKey('recipes.Recipe', on_delete=models.CASCADE, null=False, related_name='ingredients_list') # change here
    quantity = models.DecimalField(max_digits=21, decimal_places=3, null=False, default=1)

然后将该字段添加到 RecipeSerializer

class RecipeSerializer(serializers.ModelSerializer):
    ingredients_list = IngredientCompositionSerializer(read_only=True, many=True) # change here
    class Meta:
        model = Recipe
        fields = ['user', 'name', 'ingredients_list', 'created', 'modified'] # change here 'ingredients_list'

正如ingredients已经ManyToManyField在模型中那样Recipe,它会导致该问题。

PS:我认为您不需要ingredients = models.ManyToManyField('recipes.Ingredient', through='recipes.IngredientComposition')字段,但我不了解您的其余业务逻辑...

该解决方案应该不管。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django REST Framework - 使用信号扩展用户模型的问题

来自分类Dev

Django Rest Framework中有多个模型?

来自分类Dev

Django-Rest Framework多个模型

来自分类Dev

Django Rest Framework,使用多个模型查询

来自分类Dev

django rest模型权限

来自分类Dev

Django Rest Framework:request.data问题

来自分类Dev

Django Rest Framework and JSONField

来自分类Dev

Django Rest Framework API

来自分类Dev

Django Rest Framework的ModuleNotFoundError

来自分类Dev

Django Rest Framework覆盖modelserialzer中的模型字段

来自分类Dev

唯一模型字段上的Django Rest Framework PUT请求

来自分类Dev

使用Django REST Framework从多个模型返回结果

来自分类Dev

Django Rest Framework扩展用户模型,如何创建用户

来自分类Dev

使用Django-rest-framework获取模型的随机对象

来自分类Dev

如何从Django Rest Framework中的相关模型中获取数据?

来自分类Dev

Django Rest Framework从后台模型中导出csv数据

来自分类Dev

如何在Django Rest Framework中获得模型方法的价值?

来自分类Dev

Django Rest Framework Serializer:获取两个模型的字段

来自分类Dev

使用Django-rest-framework获取模型的随机对象

来自分类Dev

Django Rest Framework:查找超链接模型的URL

来自分类Dev

Django Rest Framework中模型的多种类型的更新操作

来自分类Dev

如何使用Django REST Framework保存嵌套的Backbone模型

来自分类Dev

检测 Django Rest Framework 中相关模型的变化

来自分类Dev

Django Rest Framework中扩展用户模型的补丁方法

来自分类Dev

Django REST Framework:从发布的数据创建相关模型

来自分类Dev

Django REST外键问题

来自分类Dev

Django REST API 连接问题

来自分类Dev

Django Rest Framework URL模式

来自分类Dev

Django Rest Framework API权限

Related 相关文章

热门标签

归档