如何确保在Django Rest Framework中至少有一个我的嵌套序列化程序实例用于创建?

时间:2017-08-17 10:21:35

标签: django serialization django-rest-framework

而不是长篇解释,一些代码:

我的主序列化程序OrderSerializer和嵌套序列化程序OffersSerializer

class OffersSerializer(serializers.Serializer):
    id = serializers.IntegerField(min_value=0)
    quantity = serializers.IntegerField(min_value=0)

class OrderSerializer(serializers.Serializer):
    offers = OffersSerializer(many=True, required=True)

我可以这样发布数据:

{
    "offers": []
}

这对DRF有效,但我想检查至少有一个要约,例如:

{
    "offers": [{"id": 1, "quantity": 200}]
}

如何确保至少有一个优惠?

谢谢

2 个答案:

答案 0 :(得分:1)

class OrderSerializer(serializers.Serializer):
    def validate_offers(self, attrs):
        if len(attrs) == 0:
            raise serializers.ValidationError('at least one offer required')
        return attrs

答案 1 :(得分:0)

使用Manger oder您的serzializer模型,例如:

if (mySerializerModel.objects.all()[0] != None):
    # some code
    pass

还有其他可能性来检查这一点。我认为您的经理甚至可以使用count()方法。

if (mySerializerModel.objects.all().count() > 0):
    # some code
    pass

如果你知道id,还有mySerializerModel.objects.get(<id>)。可能还有其他可能性来检查。只需查看django queryset documentation