0
models.py串行驗證方法並不驗證對象列表首次
class Customer(models.Model):
name = models.CharField(max_length=128)
email = models.EmailField(null=True, blank=True)
phone = models.CharField(max_length=128)
serializers.py
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = ("name", "email", "phone")
extra_kwargs = {
"email":{"required":True},
}
def validate_email(self, email):
qs = Customer.objects.filter(email__iexact=email)
if qs.exists():
raise serializers.ValidationError("This email is already existed")
return email
def validate_phone(self, phone):
qs = Customer.objects.filter(phone__iexact=phone)
if qs.exists():
raise serializers.ValidationError("This Phone is already existed")
return phone
views.py
class CustomerApi(SerializerMixin, APIView):
......
.........
def post(self, request):
serializer = CustomerSerializer(data=request.data, many=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(
serializer.errors,
status = status.HTTP_400_BAD_REQUEST
)
JSON
[
{
"phone": "123",
"name": "name1",
"email": "[email protected]"
},
{
"phone": "123",
"name": "nam32",
"email": "[email protected]"
}
]
上面的客戶json列表具有兩個具有相同電子郵件和電話的對象。但是,當我第一次創建時,它不驗證電子郵件和電話(驗證方法不起作用)。但一旦創建,第二次當我嘗試創建具有相同列表的客戶時,驗證方法按預期工作。 我無法找出問題所在。
謝謝您的回答。經驗證的數據一次只能提供一個字典。 – Thameem
其良好的答案,但驗證數據一次只給出一個字典。有沒有其他辦法可以做到這一點。我也嘗試了創建方法。但問題在於它只給出一個字典。 – Thameem