Django rest框架一对一关系

安苏曼·贝巴塔(Ansuman Bebarta)

所以我有以下模型:

class A(models.Model):
  name = models.CharField()
  age = models.SmallIntergerField()

class B(models.Model):
  a = models.OneToOneField(A)
  salary = model.IntergerField()

现在,我想为其中的两个创建一个休止点,因为它们是一对一的。所以我想跟着去

{
  url: 'http://localhost/customs/1/',
  name: 'abc',
  age: 24,
  salary: 10000
}

相似地,我也想创建记录并进行更新。请让我知道如何在django rest框架3中实现此目标。

妄想

我刚刚遇到了同样的问题,使响应结构与基础模型结构的联系减少确实很有用。这是我的看法:

阅读很容易

序列化程序字段具有一个source参数,该参数可以使用点名来遍历属性。

class ABSerializer(serializers.ModelSerializer):

    class Meta:
        model = A
        fields = ['name', 'age', 'salary']

    salary = serializer.IntegerField(source='b.salary') # this is your related_name

写作...不受官方支持

验证后的数据将显示一个嵌套结构,而标准的create和update方法将阻止尝试将数据字典分配给OneToOneField。好消息是,您可以通过重写create和update方法来解决此问题。这是带有update的示例:

class ABSerializer(serializers.ModelSerializer):

    class Meta:
        model = A
        fields = ['name', 'age', 'salary']
        related_fields = ['b']

    salary = serializer.IntegerField(source='b.salary') # this is your related_name

    def update(self, instance, validated_data):
        # Handle related objects
        for related_obj_name in self.Meta.related_fields:

            # Validated data will show the nested structure
            data = validated_data.pop(related_obj_name)
            related_instance = getattr(instance, related_obj_name)

            # Same as default update implementation
            for attr_name, value in data.items():
                setattr(related_instance, attr_name, value)
            related_instance.save()
        return super(ABSerializer,self).update(instance, validated_data)

当然,此示例非常简单,不执行任何异常处理,并且不能与更深层嵌套的对象一起使用...但是您明白了。

另外一个选项

您还可以创建一个具有Seri​​alizerMethodField的读写样式,该样式将同时考虑getter和setter,但是最终可能会变得更加冗长。

希望能有所帮助!

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django rest框架一对一关系更新序列化器

来自分类Dev

Django一对一关系的调用函数

来自分类Dev

Django一对一关系查询集

来自分类Dev

如何为与 django 用户模型具有一对一关系的自定义模型构建 Rest Api

来自分类Dev

如何在Django中从一对一关系反向创建记录?

来自分类Dev

一对一关系和django-autocomplete-light

来自分类Dev

何时在Django模型中使用一对一关系

来自分类Dev

django为什么不删除一对一关系?

来自分类Dev

Django中两个模型(字段)与当前模型的一对一关系

来自分类Dev

更新在Django中以一对一关系获取的对象(或从对象获取QuerySet)

来自分类Dev

如何在SqlAlchemy中描述来自Django ORM的一对一关系?

来自分类Dev

Django,当多个模型与用户具有一对一关系时

来自分类Dev

django为什么不删除一对一关系?

来自分类Dev

实体框架代码优先一对一关系

来自分类Dev

实现实体框架一对一关系

来自分类Dev

一对一关系实体框架

来自分类Dev

实体框架中的一对一关系插入

来自分类Dev

一对一字段引发错误“此字段必须唯一。” Django Rest框架

来自分类Dev

插入一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

一对一关系插入

来自分类Dev

休眠一对一关系

来自分类Dev

建立一对一关系

来自分类Dev

GSON一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

一对一关系

来自分类Dev

MYSQL一对一关系

来自分类Dev

实现一对一关系