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リストには、同じメールと電話の2つのオブジェクトがあります。しかし、私が最初に作成した場合、電子メールと電話機の検証は行われません(検証方法は機能しません)。しかし、いったんそれが作成されると、同じリストで顧客を作成しようとする2回目に、検証方法が期待通りに機能しています。 問題をトレースできませんでした。
感謝。検証されたデータは、一度に1つの辞書だけを与えます。 – Thameem
妥当な答えですが、検証されたデータは一度に1つのdictしか与えません。それを行うための他の方法はありますか?私も同様にメソッドを作成してみました。問題は一度に1つしか与えられないときです。 – Thameem