Я использую Django в качестве backend-сервера и Vue.js для приложения для видеороликов переднего плана.
У меня есть модель Ticket
class MovieTicket(models.Model):
show = models.ForeignKey(Show)
seat = models.ForeignKey(Seat)
user = models.ForeignKey(User)
purchased_at = models.DateTimeField(default=timezone.now)
qrcode = models.ImageField(upload_to='qrcode', blank=True, null=True)
qrcode_data = models.CharField(max_length=255, unique=True, blank=True)
class Meta:
unique_together = ('show', 'seat')
И связанный с ним сериализатор
class MovieTicketSerializer(serializers.ModelSerializer):
class Meta:
model = MovieTicket
fields = '__all__'
Чтобы купить новый билет, вид, который сопоставляется с этим URL http://dev.site.com/api/movies/buy-ticket/:
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def buy_ticket(request):
serialized = MovieTicketSerializer(data=request.data)
if serialized.is_valid():
serialized.save()
return Response(serialized.data, status=status.HTTP_201_CREATED)
return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)
Теперь из переднего конца (Vue.js) я могу создать новый билет в кино:
const formBody = {
show: this.$store.state.showSelected.showTime.id,
user: this.$store.state.user.id,
// selectedSeats is an array of seats that have been selected by the user. Here I am passing the first seat object.
seat: this.$store.state.selectedSeats[0].seat.id
};
this.$http.post("http://dev.site.com/api/movies/buy-ticket/", formBody)
.then(function (response) {
console.log(response.data);
})
.catch(function (response) {
console.log(response);
});
return;
Если форма была действительной, это создаст новый объект MovieTicket или покажет ошибку /s.
Теперь предположим, что если пользователь выбрал несколько мест, я могу пройти через каждый массив selectedSeats
и получить идентификаторы места на стороне клиента. И опубликуйте что-то вроде этого:
{
"purchased_at": null,
"qrcode": null,
"qrcode_data": "",
"show": 11,
"seat": [
106,
219
],
"user": 34
}
Но то, что я запутался, - это как передать несколько seat.id
, если среда Django rest принимает только одно место за запрос и соответственно отображает ошибки? Значение ошибки отображения, если билет доступен или нет, и если он доступен для создания билетов на кино для этого шоу-места.