我已经知道 drf 有一个向 obejct 添加验证器的接口(interface),我有一个可以通过一个请求创建多个 Param 对象的 View ,我想验证是否有两个或多个对象的 name
和 value
字段相同,如何验证序列化器中的对象列表?
模型.py
class Param(models.Model):
name = models.CharField(max_length=256)
value = models.CharField(max_length=256)
class Meta:
unique_together = ('name', 'value')
序列化器.py
class ParamSerializer(serializers.ModelSerializer):
class Meta:
model = models.ParamKey
fields = ['name', 'value']
extra_kwargs = {
'id': {
'required': False,
},
'name': {
'required': False,
}
}
View .py
class ParamViewSet(viewsets.ViewSet):
def create(self, request):
serializer = serializer.ParamKeySerializer(
data=request.data, many=True)
if serializer.is_valid():
return Response()
return Response()
最佳答案
您可以使用 ListSerializer
来实现此类功能。
ListSerializer 类提供同时序列化和验证多个对象的行为。您通常不需要直接使用 ListSerializer
,而应该在实例化序列化器时简单地传递 many=True
。
引用请访问https://www.django-rest-framework.org/api-guide/serializers/#listserializer
class ParamListSerializer(serializers.ListSerializer):
def validate(self, attrs):
# Here attrs contains list of Params You can validate it here
pass
def create(self, validated_data):
books = [Book(**item) for item in validated_data]
return Book.objects.bulk_create(books)
class ParamSerializer(serializers.ModelSerializer):
class Meta:
model = models.ParamKey
fields = ['name', 'value']
list_serializer_class = ParamListSerializer # This specifies which list serializer class to user
extra_kwargs = {
'id': {
'required': False,
},
'name': {
'required': False,
}
}
def validate(self, attrs):
# enter your validations here
pass
关于python - django Rest框架如何验证对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55175427/