如何修复QuerySet对象没有属性问题?

问题描述 投票:0回答:1

我需要创建新对象,或者如果已经存在,则只进行更新。我收到:QuerySet'对象没有属性“ seat”。不知道我在做什么错。

型号:

class rows_and_seats(models.Model):
    movie = models.ForeignKey(Movies, on_delete=models.CASCADE)
    row = models.CharField(max_length = 1)
    number = models.IntegerField()

    def __str__(self):
        return f'{self.movie}' 

class Reservation(models.Model):
    customer = models.ForeignKey(User, on_delete=models.CASCADE)
    movie = models.ForeignKey(Movies, on_delete=models.CASCADE)
    seat = models.ManyToManyField(rows_and_seats)
    ordered = models.DateTimeField(default=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), blank=True, null=True) 

    def __str__(self):
        return f'{self.customer.username}:{self.movie.title}:{self.ordered}'

观看次数

@login_required
def buy_seats(request, pk):
    if request.method == "POST" and request.session.get("seats"):
        seats = request.session.pop("seats")
        movie = Movies.objects.get(pk=pk)
        customer = User.objects.get(pk=request.user.id)
        for s in seats:
            user_reserved_seats = rows_and_seats.objects.get(movie=movie, row=s[:1], number=int(s[2:]))

            reservation_check = Reservation.objects.filter(customer=customer, movie=movie)
            if reservation_check.exists():
                reservation_check.seat.add(user_reserved_seats)
            else:
                new_reservation = Reservation.objects.create(customer=customer, movie=movie)
                new_reservation.seat.add(user_reserved_seats)



        messages.success(request,"You have succesfully reserved the seats.")
        return redirect("home")
    return redirect("home")

我的目标是将rows_and_seat保留在manyTomany中,以便在管理面板中仅显示一个用户保留,而不是重复其自身标题的列表。

django
1个回答
0
投票

您可以在exists()检查之后访问该值:

if reservation_check.exists():
    reservation_check.first().seat.add(user_reserved_seats)
else:
    new_reservation = Reservation.objects.create(customer=customer, movie=movie)
    new_reservation.seat.add(user_reserved_seats)
© www.soinside.com 2019 - 2024. All rights reserved.