Django Rest框架模型序列化器自定义字段

时间:2015-03-11 13:30:33

标签: django angularjs django-rest-framework angular-resource

我正在使用Django Rest Framework和AngularJS。 我有任务客户端模型。 客户端模型是任务的外键。

mInside serializers.py ClientSerializer()如下所示:

class ClientBasicSerializer(serializers.ModelSerializer):

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

TaskSerializer()(不工作)如下所示:

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

    class Meta:
        model = Task

可以看出:

  • 客户端仅检索PK。我正在使用它来保存使用AngularJS资源的任务模型。
  • client_data 包含嵌套的客户端对象。我需要它来显示用户的客户信息。

但是,它不起作用,因为Django客户端模型中没有定义client_data字段(我想我不应该定义它)。

如何将其定义为 TaskSerializer()中的自定义字段,并仍然利用 ClientSerializer()

1 个答案:

答案 0 :(得分:0)

您只能使用client = serializers.ClientSerializer()

然后,您需要重写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.