Как исправить QuerySet 'объект не имеет проблемы с атрибутом? - PullRequest
0 голосов
/ 22 января 2020

Мне нужно создать новый объект или просто обновить, если он уже существует. Я получаю: QuerySet 'объект не имеет атрибута "место". Не знаю, что я делаю не так.

модели:

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")

Моя цель - сохранить row_and_seat в manyTomany, чтобы отображать только одно резервирование пользователя в панели администратора вместо список повторяющихся заголовков.

1 Ответ

0 голосов
/ 22 января 2020

Вы можете получить доступ к значению после проверки 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)

Может быть, вы можете использовать что-то вроде get_or_create :

user_reserved_seats = rows_and_seats.objects.get(movie=movie, row=s[:1], number=int(s[2:]))
reservation, created = Reservation.objects.get_or_create(
    customer=customer, movie=movie,
)
reservation.seat.add(user_reserved_seats)

Также вы можете слишком много раз зацикливайтесь на сиденьях, возможно, вы можете добавить все места только в одном назначении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...