У меня есть такая функция POST:
def post(self, request):
try:
serializer = CCTDSPostSerializer(data=request.data)
print("serializer", serializer)
print("is valid", serializer.is_valid())
Сериализатор работает следующим образом, по определенным причинам он не является сериализатором модели.
class CCTDSPostSerializer(serializers.Serializer):
status = serializers.CharField()
transaction = serializers.CharField(allow_blank=True, allow_null=True)
comment = serializers.CharField(allow_blank=True, allow_null=True)
tds_id = serializers.ListField(child=serializers.IntegerField())
def check_tds_eligibility(self, data):
tds_ids = data.get('tds_id', None)
if tds_ids is not None:
tds_obj = TDS.objects.filter(id__in=tds_ids, status='open')
if tds_obj.count() == len(tds_ids):
return tds_ids
return None
def validate_status_transaction(self, obj):
status = obj.get('status', None)
transaction = obj.get('transaction', None)
if status == 'closed' and transaction is not None:
return True
elif status == 'rejected' and transaction is None:
return True
return False
def validate(self, obj):
validate_status_transaction = self.validate_status_transaction(obj)
tds_ids = self.check_tds_eligibility(obj)
if validate_status_transaction and tds_ids:
print("returning obj")
return obj
print("returning false")
return False
Данные, которые я передаюэто:
{
"tds_id":[1],
"status":"closed",
"transaction":"ABC",
"comment":"Boom"
}
Теперь, основываясь на условиях для данных, присутствующих в базе данных, речь идет об операторе print("returning false")
, т.е. он возвращает False
, но на стороне просмотра - оператор serializer.is_valid()
дает вывод в виде True
Почему функция проверки возвращает False, а is_valid
возвращает True
?