我们可以在序列化器 class 本身中强制使用任何一个序列化器字段吗?

Can we make either of the serializer fields compulsory in the serializer class itself?

我有一个序列化程序 class,我想主要用它来获取请求数据并用它来保存不同模型中的详细信息。我想在请求正文中包含一个或两个参数。我可以在我的 views.py 中处理它,但我想知道有没有办法让我们在序列化器 class 本身内部检查其中一个或两个?

提前致谢:)

#serializers.py

class ScanUpdateSerializer(serializers.Serializer):
    assets = serializers.ListField(child=serializers.DictField())
    issues = serializers.ListField(child=serializers.DictField())

我不知道你到底想做什么,但覆盖方法似乎是这样 def create(self, validated_data) and/or def update(self, instance, validated_data)

您可以在此处查阅文档:https://www.django-rest-framework.org/api-guide/serializers/#saving-instances

如果你想让这两个字段中的任何一个成为必填字段,你可以使用验证方法来检查和强制执行它。

例如

from rest_framework.exceptions import ValidationError


class ScanUpdateSerializer(serializers.Serializer):
    assets = serializers.ListField(child=serializers.DictField())
    issues = serializers.ListField(child=serializers.DictField())
    

    def validate(self, attrs):
        if not ("assets" in self.initial_data or "issues" in self.initial_data):
            raise ValidationError("Either assets or issues need to be set.")
        return attrs