Suppose I've 2 models created namely: booking and passenger. Both have a relationship of Many-to-many. Now, without using a nested serializer, how do I use both models' serializers to post data inside DB?
model.py
class Passenger(models.Model):
name = models.CharField(max_length=100,blank=True, default='')
contact_number= models.IntegerField()
email = models.EmailField(max_length=254)
gender = models.IntegerField(choices=GENDER_CHOICES)
age= models.IntegerField()
user=models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
return self.name
class Booking(models.Model):
user =models.ForeignKey(User,on_delete=models.CASCADE)
flights =models.ForeignKey(Flight,on_delete=models.CASCADE)
**passenger =models.ManyToManyField(Passenger)**
booking_number= models.IntegerField(default=0, blank= True)
booking_time = models.DateTimeField(auto_now=False, auto_now_add=False)
no_of_passengers= models.IntegerField(default=0, blank= True)
def __str__(self):
return self.booking_number
and the Corresponding serializer
serializer.py
class PassengerSerializer(serializers.ModelSerializer):
class Meta:
model= Passenger
fields = '__all__'
class BookingSerializers(serializers.ModelSerializer):
class Meta:
model= Booking
fields = '__all__'
Now what I've to do is that in views.py I'm creating "class BookingAPIView(APIView):"
NOw in this I've to use POST method def post(self, request, format=None):
bookserializer = BookingSerializers(data=request.data)
passengerserializer = PassengerSerializer(data=request.data)
HOW to save data from both serializers in this single POST method?
view.py
class BookingAPIView(APIView):
def get(self, request, format=None):
bookings = Booking.objects.all()
serializer = BookingSerializer(bookings, many=True)
return Response(serializer.data)
def post(self, request, format=None):
bookserializer = BookingSerializers(data=request.data)
passengerserializer = PassengerSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)