[英]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.py , ClientSerializer()看起来像:
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: 可以看出:
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.