gpt4 book ai didi

django - 在 Django 和 Django Rest Framework 中使用一个请求创建多个对象

转载 作者:行者123 更新时间:2023-12-03 14:06:03 24 4
gpt4 key购买 nike

我使用 Django 作为后端服务器,使用 Vue.js 作为前端电影应用程序。

我有一个票证模型

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__'

要购买新票,有一个 View 映射到此 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
}

但我感到困惑的是我如何才能通过多个 seat.id如果 Django rest 框架每个请求只接受一个席位并相应地显示错误?如果票可用或不可用,则表示显示错误,如果可用,则为该演出座位创建电影票。

最佳答案

使用 many=True 初始化序列化程序

在您的实现中,这很容易实现:

serialized = MovieTicketSerializer(data=request.data, many=True)

数据不是单个对象,而是一组对象。

您的信息表明您需要转换 request.data 以制作这些多个对象(所有相同的数据只是不同的座位号)。对?

无论如何:

见: How do I create multiple model instances with Django Rest Framework?

编辑:

这里是 drf 文档中的信息: http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-multiple-objects

(强烈建议在编写第一个真正的实现之前,从上到下阅读 drf 文档并尝试使用它。有很多方法可以使用 drf,了解所有这些会导致更好的决策)

编辑 2(问题更新后):

您可以从客户端发送此 JSON(见下文),或从客户端在您的 buy_ticket(request) 中发送的当前 JSON 创建此格式。打电话之前的方法 MovieTicketSerializer(...,many=True) :
[
{
"purchased_at": null,
"qrcode": null,
"qrcode_data": "",
"show": 11,
"seat": 106,
"user": 34
},
{
"purchased_at": null,
"qrcode": null,
"qrcode_data": "",
"show": 11,
"seat": 219,
"user": 34
}
]

关于django - 在 Django 和 Django Rest Framework 中使用一个请求创建多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43435247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com