Валидация сериализатора Django
Я использую сериализаторы для валидации. Когда я отправляю ключ с именем ip_port, который является списком в форме-данных postman, то приходит ответ 'This field is required' для ключа ip_port. Также я прилагаю изображение postman, где я получаю ответ. Пожалуйста, помогите кому-нибудь и заранее спасибо. ответ postman при тестировании POST api
views.py
def post(self,request,format=None):
data=request.data
serializer=UserRequestFormSerializer(data=data)
if serializer.is_valid(raise_exception=True):
# breakpoint()
serializer.save(user=self.request.user)
# print(serializer.data)
sdata=serializer.data
return Response({'detail':'User Request Form created successfully','created_data':sdata},status=status.HTTP_201_CREATED)
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
serializers.py
class UserRequestFormSerializer(serializers.ModelSerializer):
ip_port = IPPortSerializer(many=True)
district=serializers.CharField(source='user.district',read_only=True)
class Meta:
model=UserRequestForm
fields='__all__'
read_only_fields=['user','district']
def to_representation(self, instance):
data = super().to_representation(instance)
if instance.form_status == "REJECT":
data['rejection_data'] = RejectionTableSerializer(instance.rejectiontable_set.last()).data
return data
def create(self, validated_data):
ipport=validated_data.pop('ip_port')
user=UserRequestForm.objects.create(**validated_data)
if ipport:
ls=[]
for i in ipport:
ls.append(IPPort.objects.create(**i))
user.ip_port.set(ls)
return user
models.py
class UserRequestForm(models.Model):
#All Foreign keys:
observer_account_type = models.CharField(max_length=200, choices=ACCOUNT_TYPE, blank=True,default='USER')
decision_taken_by=models.ForeignKey(User,on_delete=models.CASCADE,related_name='userrequestform_decision_taken_by',blank=True,null=True)
user=models.ForeignKey(User,on_delete=models.CASCADE)
ip_port=models.ManyToManyField(IPPort)
#to be filled by the user:
sys_date=models.DateField()
sys_time=models.TimeField()
target_type=models.CharField(max_length=200,choices=TARGET_TYPE)
case_ref=models.CharField(max_length=200)
case_type=models.CharField(max_length=200)
request_to_provide=models.CharField(max_length=200,choices=REQUEST_TO_PROVIDE)
mobile_number=models.BigIntegerField(validators=[mobile_regex_validator])
cell_id=models.CharField(max_length=200)
imei=models.CharField(max_length=200)
select_tsp=models.ForeignKey(Tsp,on_delete=models.PROTECT)
duration_date_from=models.DateField()
duration_date_to=models.DateField()
duration_time_from=models.TimeField()
duration_time_to=models.TimeField()
user_file=models.FileField(upload_to='user_doc',blank=True,null=True)
#to be filled by TSP and CYBERDOME
form_status=models.CharField(max_length=200,choices=FORM_STATUS,blank=True,null=True,default='PENDING')
admin_status=models.CharField(max_length=200,choices=FORM_STATUS,blank=True,null=True,default='PENDING')
#for tsp replie
requested_date=models.DateField(blank=True,null=True)
replied_date=models.DateField(blank=True,null=True)
#for cyberdome view
approval_or_reject_date=models.DateField(blank=True,null=True)
approval_or_reject_time=models.TimeField(blank=True,null=True)
#For TSP to upload file after approval
tsp_file=models.FileField(upload_to='tsp_doc',blank=True)
class Meta:
ordering = ('id',)
def __str__(self):
return str(self.mobile_number)
class IPPort(models.Model):
ip=models.CharField(max_length=200,validators=[ip_regex_validator])
port=models.IntegerField()
date_from=models.DateField(blank=True,null=True)
date_to=models.DateField(blank=True,null=True)
time_from=models.TimeField(blank=True,null=True)
time_to=models.TimeField(blank=True,null=True)
def __str__(self) -> str:
return f'{self.ip}{self.port}'