[英]how to post data of two models in single view.py using serializer? django rest framework
假設我創建了 2 個模型,即:預訂和乘客。 兩者都具有多對多的關系。 現在,使用嵌套序列化程序,我如何使用兩個模型的序列化程序在數據庫中發布數據?
模型.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
和相應的序列化程序
序列化程序.py
class PassengerSerializer(serializers.ModelSerializer):
class Meta:
model= Passenger
fields = '__all__'
class BookingSerializers(serializers.ModelSerializer):
class Meta:
model= Booking
fields = '__all__'
現在我要做的是在views.py中創建“class BookingAPIView(APIView):”
現在我必須使用 POST 方法 def post(self, request, format=None): bookserializer = BookingSerializers(data=request.data) Passengerserializer = PassengerSerializer(data=request.data)
如何在這個單一的 POST 方法中保存來自兩個序列化程序的數據?
視圖.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)
您可以使用raise_exception=True
在序列化程序驗證期間引發異常。 然后,您可以檢查兩個序列化程序是否有效,然后一個接一個地保存它們。 對於響應,您可以以任何您喜歡的方式組合來自兩個序列化程序的數據,然后返回。 代碼可能看起來像這樣:
def post(self, request, format=None):
bookserializer = BookingSerializers(data=request.data)
passengerserializer = PassengerSerializer(data=request.data)
if bookserializer.is_valid() and passengerserializer.is_valid():
bookserializer.save(raise_exception=True)
passengerserializer.save(raise_exception=True)
data = {
'book': bookserializer.data,
'passenger': passengerserializer.data
}
return Response(data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.