Python 如何提供适当的请求主体来序列化Django通用外键?
我有一个叫做“电话”的通用型号: (my_project/apps/phones/models.py) 我还有一个叫做“客户机”的模型: (my_project/apps/clients/models.py) 我还有一个用于“客户端”的序列化程序: (my_project/apps/clients/serializers.py) 我遵循了drf documentation(),据我所知,我需要将自定义类放在同一个文件中,因此我的clients/serializers.py是这样的: (my_project/apps/clients/serializers.py) 对于请求,我正在使用PostMan,因此以下是我创建具有电话号码的新客户端的请求:Python 如何提供适当的请求主体来序列化Django通用外键?,python,django,django-rest-framework,jwt,postman,Python,Django,Django Rest Framework,Jwt,Postman,我有一个叫做“电话”的通用型号: (my_project/apps/phones/models.py) 我还有一个叫做“客户机”的模型: (my_project/apps/clients/models.py) 我还有一个用于“客户端”的序列化程序: (my_project/apps/clients/serializers.py) 我遵循了drf documentation(),据我所知,我需要将自定义类放在同一个文件中,因此我的clients/serializers.py是这样的: (my_pr
但它没有任何作用,可以成功创建新客户端,但它们不包含任何电话号码,请帮助 您可以将相关字段添加到序列化程序字段中
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())
很好!但是您在哪里使用了这个PhoneObjectRelatedField
??在ClientSerializer
字段phonephone=PhoneObjectRelatedField()
我试过了,但是在我的views.py中:'serializers.is_valid()'返回False,实际上我不得不这样写:phone=PhoneObjectRelatedField(queryset=phone.objects.all),因为django说queryset是必需的好的,尝试一下并用结果通知我我在ClientSerializer中添加了:phone=PhoneObjectRelatedField(queryset=phone.objects.all()),我向邮递员发出了请求,如:phone.owner\u name和phone.number,但我的views.py会引起问题,serializer.is\u valid()现在返回=False((好的,你得到了什么,我以前没有接触过这个,所以我们决定去找她,我们可以去聊天吗?
class Client(Model):
employee = ForeignKey(Employee, on_delete=CASCADE)
title = CharField(max_length=50)
phones = GenericRelation(Phone)
class ClientSerializer(ModelSerializer):
id = IntegerField(read_only=True)
employee_id = PrimaryKeyRelatedField(queryset=Employee.objects.all(), source='employee', required=True)
title = CharField(required=True)
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
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()