Reputation: 985
When I am creating a Clinic
via Swagger
or Postman
it works fine and field with the same data when test it !
model
class Clinic(models.Model):
name = models.CharField(max_length=50)
price = models.FloatField()
doctor = models.ForeignKey(User, on_delete=models.CASCADE, related_name='doctor_clinic')
date = models.ManyToManyField(ClinicDate, related_name='clinic_date')
serializer
class ClinicDateSerializers(serializers.ModelSerializer):
class Meta:
model = ClinicDate
fields = ['day','start_time', 'end_time']
class ClinicSerializers(serializers.ModelSerializer):
doctor = serializers.StringRelatedField(required=False)
date = ClinicDateSerializers(many=True, required=True)
class Meta:
model = Clinic
fields = ['name', 'price', 'doctor', 'date']
def create(self, validated_data):
dates_data = None
if 'date' in validated_data:
dates_data = validated_data.pop('date')
user = self.context['request'].user
clinic = Clinic.objects.create(doctor=user, **validated_data)
if dates_data != None:
for date_data in dates_data:
dt = ClinicDate.objects.create(**date_data)
clinic.date.add(dt)
clinic.save()
return clinic
URL
path('add/', views.ClinicCreateView.as_view(), name='clinic-create'),
pytest
@pytest.mark.django_db
class TestClinic:
@pytest.fixture
def setup(self):
User.objects.create_doctor(email="[email protected]", password="12345")
data = {
'email':'[email protected]',
'password':'12345',
}
response = client.post(reverse('token_obtain_pair_doctor'), data=data)
self.access_token = response.json()['access']
client.credentials(HTTP_AUTHORIZATION='Bearer ' + self.access_token)
def test_valid_create_clinic(self, setup):
data = {
"name": "Clinic 1",
"price": 1000,
"date": [
{
"day": "SATURDAY",
"start_time": "2021-08-24T21:21:17.960Z",
"end_time": "2021-08-24T21:21:17.960Z"
}
]
}
response = client.post(reverse('clinic-create'), data=data)
assert response.status_code == status.HTTP_201_CREATED
Swagger Snapshot
Hint there is no problem with setup
or data
Upvotes: 0
Views: 368
Reputation: 985
Just for the record: The problem was that I'm dealing with nested serializer and by default multipart format does not support nested data so, I just want to set `formate = 'json'
response = client.post(reverse('clinic-create'), data=data, format='json')
Upvotes: 1