我有一个名为“电话”的通用模型:
(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()
phone = PhoneObjectRelatedField(queryset=Phone.objects.all())
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句