Django rest框架:通过额外的参数覆盖ModelSerializer中的create() [英] Django rest framework: override create() in ModelSerializer passing an extra parameter

查看:1153
本文介绍了Django rest框架:通过额外的参数覆盖ModelSerializer中的create()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种方法来适当地避开Django Rest Framework中ModelSerializer序列化程序的默认.create()方法,以处理额外的参数.

I am looking for a way to properly ovverride the default .create() method of a ModelSerializer serializer in Django Rest Framework for dealing with an extra parameter.

在我最初的Django模型中,我刚刚重写了用于管理extra参数的default .save()方法.现在.save()也可以通过以下方式调用:.save(extra = 'foo').

In my original Django model I have just overridden the default.save() method for managing an extra param. Now .save() can be called also in this way: .save(extra = 'foo').

我必须在该原始Django模型上创建一个ModelSerializer映射:

I have to create a ModelSerializer mapping on that original Django model:

from OriginalModels.models import OriginalModel
from rest_framework import serializers

class OriginalModelSerializer(serializers.ModelSerializer):

    # model fields
    class Meta:
        model = OriginalModel

但是以这种方式,我无法将extra参数传递给模型.save()方法.

But in this way I can't pass the extra param to the model .save() method.

如何正确覆盖我的OriginalModelSerializer类的.create()方法,以(最终)考虑此extra参数?

How can I properly override the .create() method of my OriginalModelSerializer class to take (eventually) this extra param into account?

推荐答案

嗯.这可能不是一个完美的答案,因为我不知道您想如何传递此额外"信息(即,它是否是通常形式的额外字段,等等)

Hmm. this might not be the perfect answer given I don't know how you want to pass this "extra" in (ie. is it an extra field in a form normally, etc)

您可能想要做的只是将foo表示为序列化器上的一个字段.然后它将出现在createvalidated_data中,然后您可以使create做如下操作

What you'd probably want to do is just represent foo as a field on the serializer. Then it will be present in validated_data in create, then you can make create do something like the following

def create(self, validated_data):
    obj = OriginalModel.objects.create(**validated_data)
    obj.save(foo=validated_data['foo'])
    return obj

您可能想要查看create的默认实现,以了解它所做的其他一些事情(例如删除多对多关系等).

You'd probably want to look at the default implementation of create for some of the other things it does though (like remove many-to-many relationships, etc.).

这篇关于Django rest框架:通过额外的参数覆盖ModelSerializer中的create()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆