【问题标题】:How can I update two models in one serializer in Django Rest Framework?如何在 Django Rest Framework 的一个序列化程序中更新两个模型?
【发布时间】:2017-02-08 10:44:55
【问题描述】:

我有一个数据库架构,它的每个特定类型的对象都存储在两个单独的表中(每个表中有一行,每个表中有不同的数据,外键从一个到另一个。)

不幸的是,Django Rest Framework 倾向于假设序列化程序和模型之间存在一对一的对应关系,而我的情况并非如此。我应该如何处理这个?似乎序列化程序应该返回对象的表示,这将是 ajax 请求的实际 HTTP 响应,因此使用两个序列化程序似乎不正确。我已经研究过扩展 BaseSerializer(如果我没有找到更好的解决方案,这就是我目前计划实现的方式),但某些方法采用 instance,它应该包含序列化对象所需的所有数据,而我有两个相关的实例。

任何建议将不胜感激!谢谢。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    Writable nested representations 部分可能会对您有所帮助。

    您有 2 个模型 ModelAModelB。创建你的第一个模型的序列化器

    class ModelASerializer(serializers.ModelSerializer):
        class Meta:
            model = ModelA
            fields = ('fields',..) # 
    

    然后在其他模型的序列化器中添加第一个序列化器并覆盖所需的方法(如createupdate)。像这样的:

    class ModelBSerializer(serializers.ModelSerializer):
        # add the serializer for the foreignkey model 
        model_a = ModelASerializer()   
    
        class Meta:
            model = ModelB
            fields = ('fields',..) # 
    
       def create(self, validated_data):
           modela_data = validated_data.pop('model_a')
           model_b = ModelB.objects.create(**validated_data)
           ModelA.objects.create(model_b=model_b, **modela_data)
           return model_b
    
       # override update too ..
    

    【讨论】:

    • 我是 rest 框架的新手,我在更新时遇到问题,当我去更新页面时,我的模型 B 数据显示在字段中,但它没有在这些字段中显示模型 A 数据我应该怎么做确实,我已经检查了很多答案,但是在浏览器中更新时我无法在字段中获取两个模型的数据...
    • 现在如何在views.py中应用这个@Tiny Instance
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2018-12-21
    相关资源
    最近更新 更多