【发布时间】:2017-09-12 02:42:48
【问题描述】:
我使用 Django 作为后端服务器,使用 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 对象,否则会显示错误。
现在,假设如果用户选择了多个座位,我可以遍历每个 selectedSeats 数组并在客户端获取座位 ID。并发布这样的内容:
{
"purchased_at": null,
"qrcode": null,
"qrcode_data": "",
"show": 11,
"seat": [
106,
219
],
"user": 34
}
但我感到困惑的是,如果 Django 休息框架每个请求只接受一个席位并相应地显示错误,我怎么能传递多个 seat.id?意思是如果票可用或不可用,则显示错误,如果可用,则为该放映席创建电影票。
【问题讨论】:
-
我不是 django 专家,但你不能创建一种方法来处理 id 数组并循环遍历它们,而不是只处理一个 id - 抱歉,如果问题看起来很奇怪
-
如果您可以更改 REST API,您可以添加一个新端点,例如“buy_tickets”。并将多个 seat.id 传递给它。
-
@AmrAly 是的,我也希望能找到答案。
-
这里有一些很好的答案:stackoverflow.com/q/14666199/1224827
标签: django django-rest-framework