【问题标题】:Django Rest Framework Nested Different Serializer Saving ProblemDjango Rest Framework嵌套不同的序列化程序保存问题
【发布时间】:2021-07-30 21:58:27
【问题描述】:

我有类别和产品模型。我为每个模型创建了 2 个序列化程序。当我想添加一个新产品时,我发送这个 json: {"name":"name","price":1,"category":{"id":1}} 但 django 给出错误并说我需要也指定类别名称。我已经给出了 id 那么为什么我还要给出类别名称(具有 id 1 的类别已经存在。我正在尝试将新产品添加到该类别中)?如果我使类别的名称字段不需要 django 不会给出错误。但是当我想添加新类别时,如果我没有在 json 中指定名称字段,它不会给出错误。我希望 django 在我尝试添加新类别时给出“需要名称”错误,但我不希望它在我尝试添加新产品时给出错误。如果我将类别设为只读,当我想更新产品时,它不会更新产品的 category_id。

class Product(models.Model):
    name=models.CharField(max_length=32)
    price=models.FloatField()
    category=models.ForeignKey("Category",on_delete=models.CASCADE)

class Category(models.Model):
    name=models.CharField(max_length=32)

class CategorySerializer(ModelSerializer):
    class Meta:
        model=Category
        fields="__all__"

class ProductSerializer(ModelSerializer):
    class Meta:
        model=Product
        fields="__all__"
    category=CategorySerializer()

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    我也有同样的问题。

    我的解决办法是:

    class CategorySerializer(ModelSerializer):
        class Meta:
            model=Category
            fields="__all__"
    
    class ProductSerializer(ModelSerializer):
        class Meta:
            model=Product
            fields="__all__"
        category = CategorySerializer(read_only=True)
        category_id = PKR(queryset=Category.objects.all(),
                   source="category",write_only=True)
    

    这样: 当您想添加或更新使用 category_id 字段来使用现有类别

    如果您想读取序列化程序返回所有字段的类别:)

    【讨论】:

    • 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 2014-10-04
    • 2014-12-21
    • 1970-01-01
    • 2016-02-09
    • 2018-07-06
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多