如何提供正确的请求正文来序列化 Django 通用外键?

马迪7

我有一个名为“电话”的通用模型:

(my_project/apps/phones/models.py)

class Phone(Model):
    owner_name = CharField(max_length=50)
    number = CharField(max_length=20)

    content_type = ForeignKey(ContentType, on_delete=CASCADE)
    object_id = PositiveIntegerField()
    phone_object = GenericForeignKey('content_type', 'object_id')

我还有一个名为“客户端”的模型:

(my_project/apps/clients/models.py)

class Client(Model):
    employee = ForeignKey(Employee, on_delete=CASCADE)
    title = CharField(max_length=50)

    phones = GenericRelation(Phone)

我还有一个“客户端”的序列化程序:

(my_project/apps/clients/serializers.py)

class ClientSerializer(ModelSerializer):
    id = IntegerField(read_only=True)
    employee_id = PrimaryKeyRelatedField(queryset=Employee.objects.all(), source='employee', required=True)
    title = CharField(required=True)

我遵循了 drf-documenation ( http://www.django-rest-framework.org/api-guide/relations/#generic-relationships ),据我所知,我需要将自定义类放在同一个文件中,所以这里是我的 clients/serializers.py 看起来像:

(my_project/apps/clients/serializers.py)

class ClientSerializer(ModelSerializer):
    id = IntegerField(read_only=True)
    employee_id = PrimaryKeyRelatedField(queryset=Employee.objects.all(), source='employee', required=True)
    title = CharField(required=True)

class PhoneObjectRelatedField(RelatedField):
    def to_representation(self, value):
        if isinstance(value, Client):
            serializer = ClientSerializer(value)
        else:
            raise Exception('Unexpected type of phone_object')
        return serializer.data

对于我使用 PostMan 的请求,这里是我使用电话号码创建新客户端的请求: 在此处输入图片说明

但它什么也没做,可以成功创建新客户端,但它们不包含任何电话号码,请帮助!

拉乌夫

您可以将相关字段添加到序列化程序字段

class ClientSerializer(ModelSerializer):
    id = IntegerField(read_only=True)
    employee_id = PrimaryKeyRelatedField(queryset=Employee.objects.all(), source='employee', required=True)
    title = CharField(required=True)
    phone = PhoneObjectRelatedField()

@Madi7 更新

phone = PhoneObjectRelatedField(queryset=Phone.objects.all())

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django外键访问如何工作

来自分类Dev

Django通用外键

来自分类Dev

如何为外键Django创建表单

来自分类Dev

Django通用外键排序

来自分类Dev

Django无法级联删除相关的通用外键对象

来自分类Dev

在Django Rest Framework中,如何限制要序列化的外键对象的数量

来自分类Dev

Django Rest框架多个外键序列化

来自分类Dev

使用外键Django序列化模型

来自分类Dev

Django REST Framework:如何向使用穿透表的M2M序列化器添加外键?

来自分类Dev

如何在Django序列化器中的外键关系之上从ManyToMany关系访问字段?

来自分类Dev

在保存Django-Rest-Framework序列化程序中包含外键

来自分类Dev

Django:使用通用外键链接两个模型

来自分类Dev

Django模型序列化仅返回主键作为外键

来自分类Dev

Django Deliciouspie,包括通用外键字段结果

来自分类Dev

我应该在Django中使用通用外键吗?如何使用?

来自分类Dev

Django rest-framework如何序列化对象/外键

来自分类Dev

django rest框架外键序列化器问题

来自分类Dev

Django外键的命名,以请求正确的列

来自分类Dev

Django Rest Framework,外键字段的默认序列化程序

来自分类Dev

Django DRF-将外键字段包含到序列化程序中

来自分类Dev

在Django GeoJSON序列化器中包含外键

来自分类Dev

如何在 Django 序列化程序中获取外键 ID 而不是引用模型

来自分类Dev

django rest框架外键序列化

来自分类Dev

Django(模型):如何从外键获取实例

来自分类Dev

Django rest PUT 请求序列化程序无法使用外键更新模型

来自分类Dev

Django rest IntegrityError:1048,外键序列化器上的“列不能为空”

来自分类Dev

Django - 通过带有外键引用的序列化程序创建一个实例

来自分类Dev

Django rest 框架序列化程序外键

来自分类Dev

Django Rest序列化程序外键是必需的错误

Related 相关文章

  1. 1

    Django外键访问如何工作

  2. 2

    Django通用外键

  3. 3

    如何为外键Django创建表单

  4. 4

    Django通用外键排序

  5. 5

    Django无法级联删除相关的通用外键对象

  6. 6

    在Django Rest Framework中,如何限制要序列化的外键对象的数量

  7. 7

    Django Rest框架多个外键序列化

  8. 8

    使用外键Django序列化模型

  9. 9

    Django REST Framework:如何向使用穿透表的M2M序列化器添加外键?

  10. 10

    如何在Django序列化器中的外键关系之上从ManyToMany关系访问字段?

  11. 11

    在保存Django-Rest-Framework序列化程序中包含外键

  12. 12

    Django:使用通用外键链接两个模型

  13. 13

    Django模型序列化仅返回主键作为外键

  14. 14

    Django Deliciouspie,包括通用外键字段结果

  15. 15

    我应该在Django中使用通用外键吗?如何使用?

  16. 16

    Django rest-framework如何序列化对象/外键

  17. 17

    django rest框架外键序列化器问题

  18. 18

    Django外键的命名,以请求正确的列

  19. 19

    Django Rest Framework,外键字段的默认序列化程序

  20. 20

    Django DRF-将外键字段包含到序列化程序中

  21. 21

    在Django GeoJSON序列化器中包含外键

  22. 22

    如何在 Django 序列化程序中获取外键 ID 而不是引用模型

  23. 23

    django rest框架外键序列化

  24. 24

    Django(模型):如何从外键获取实例

  25. 25

    Django rest PUT 请求序列化程序无法使用外键更新模型

  26. 26

    Django rest IntegrityError:1048,外键序列化器上的“列不能为空”

  27. 27

    Django - 通过带有外键引用的序列化程序创建一个实例

  28. 28

    Django rest 框架序列化程序外键

  29. 29

    Django Rest序列化程序外键是必需的错误

热门标签

归档