简体   繁体   English

Django Rest Framework模型序列化程序自定义字段

[英]Django Rest Framework Model Serializer Custom Field

I'm using Django Rest Framework and AngularJS. 我正在使用Django Rest Framework和AngularJS。 I have Task and Client models. 我有任务客户端模型。 The Client model is a Foreign Key for Task . 客户模型是Task的外键。

mInside serializers.py , the ClientSerializer() looks like: mInside serializers.pyClientSerializer()看起来像:

class ClientBasicSerializer(serializers.ModelSerializer):

    class Meta:
        model = Client
        fields = ('id', 'name', 'gender')

And the TaskSerializer() (not working) looks like this: 而且TaskSerializer() (不起作用)如下所示:

class TaskSerializer(serializers.ModelSerializer):
    client = serializers.PrimaryKeyRelatedField(read_only=True)
    client_data = serializers.ClientSerializer()

    class Meta:
        model = Task

As can be seen: 可以看出:

  • client retrieves only the PK. 客户端仅检索PK。 I'm using it to save the Task model with AngularJS resource. 我正在用它来保存带有AngularJS资源的Task模型。
  • client_data contains the nested client object. client_data包含嵌套的客户端对象。 I need it to display the client information for the user. 我需要它来显示用户的客户信息。

However, it does not work because there is no client_data field defined inside the Django Client Model (and I think I shouldn't define it). 但是,它不起作用,因为在Django客户端模型内没有定义client_data字段(我认为我不应该定义它)。

How can I define it as a custom field inside the TaskSerializer() and still take advantage of the ClientSerializer() ? 如何将其定义为TaskSerializer()内的自定义字段,并且仍然利用ClientSerializer()

You can use just client = serializers.ClientSerializer() 您可以只使用client = serializers.ClientSerializer()

Then, you need to rewrite your create method in order to assign client instance to the created task instance. 然后,您需要重写create方法,以便将客户端实例分配给创建的任务实例。

class TaskSerializer(serializers.ModelSerializer):
    client = serializers.ClientSerializer()

    class Meta:
        model = Task

    def create(self, validated_data):

        client_id = validated_data['client'] # this should be client id
        client = Client.objects.get(id=client_id)
        del(validated_data['client'])
        task = Task.objects.create(**validated_data)
        task.client = client
        task.save()
        return save. 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Django Rest Framework –序列化程序中的“自定义超链接”字段 - Django Rest Framework – Custom Hyperlink field in serializer 如何在包含另一个序列化程序(模型)、django rest 框架的序列化程序中创建自定义列表字段? - How to create custom list field in serializer, which contains another serializer(model), django rest framework? Django Rest Framework v3.0:如何在保存对象时将自定义序列化程序字段映射到模型字段? - Django Rest Framework v3.0 : How to map custom serializer fields to model field while saving an object? 将变量(非模型字段)传递给Django Rest框架中的序列化器 - Pass variable (non-model-field) to serializer in django rest framework 在Django REST框架中将不在模型中的字段添加到序列化程序中 - Adding field that isn't in model to serializer in Django REST framework Django Rest Framework序列化器-多次序列化单个模型字段 - Django rest framework serializer - Serialize single model field multiple times Django Rest Framework - 在序列化器中获取相关的模型字段 - Django Rest Framework - Get related model field in serializer 如何在django rest框架中将绝对url字段放在序列化器模型中? - how to put absolute url field in serializer model in django rest framework? Django REST框架:在序列化器中获取相关模型的字段 - Django REST framework: get field of related model in serializer 嵌套关系序列化器中的Django Rest Framework模型Id字段 - Django Rest Framework model Id field in nested relationship serializer
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM