Django:在序列化器本身中获取序列化器字段的值

xbp102n0  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(153)

在我的Django序列化器中,我有一个validate()方法。
我想访问序列化器的一个字段的值,我该怎么做呢?
Python 3.10.2和Django 3.2.23
这里之前的答案建议使用self.initial_data.get("field_name")),但这对我的Django版本不起作用(消息:AttributeError:'MySerializer'对象没有属性'initial_data')。

class MySerializer:
    models = models.MyModel

    class Meta:
        fields = "my_field"

    def validate(self, data):
        # Want to get the value of my_field here

字符串
非常感谢提前任何援助。

doinxwow

doinxwow1#

解决方案是将数据添加到关联的Django视图的上下文中-在我的例子中是一个id -并在定义序列化程序时填充它。
检视:

def put(self, request, *args, **kwargs):
    instance = ... # Get current db instance here

    serializer = MySerializer(
        instance=instance,
        data=request.data,
        context={"user_id": self.request.user.id},
    )

字符串
串行化器:

def validate(self, data):
    context = getattr(self, "context", None)

    if context is None:
        return data

    user_id = context.get("user_id")
    obj = MyEntity.objects.get(user_id=user_id)


这也适用于嵌套的序列化程序:自动为每个序列化程序提供上下文值。

相关问题