models.pysérialiseurs méthode de validation ne sont pas valider liste d'objets pour la première fois
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]"
}
]
la liste ci-dessus json client ont deux objets avec même email et téléphone. Mais il ne valide pas l'email et le téléphone (les méthodes de validation ne fonctionnent pas) quand je crée si pour la première fois. Mais une fois qu'il est créé, la deuxième fois que j'essaie de créer le client avec la même liste, la méthode de validation fonctionne comme prévu. Je n'ai pas pu identifier le problème.
Merci pour votre réponse. Les données validées ne donnent qu'une seule dictée à la fois. – Thameem
sa bonne réponse, mais les données validées ne donne qu'une dict à la fois. Y a-t-il un autre moyen de le faire? Je l'ai essayé avec la méthode de création aussi bien. mais le problème est à la fois il donne seulement un dict. – Thameem