двойное значение ключа нарушает уникальное ограничение "booking_reservation_student_id_key" ПОДРОБНОЕ: Ключ (student_id) = (1) уже существует - PullRequest
0 голосов
/ 07 марта 2020

Я новичок в Django и в настоящее время работаю в системе бронирования хостелов. Я однако испытываю некоторые ошибки. Во-первых, я хочу, чтобы поле is_reserved в модели комнаты было True при резервировании, я пробовал разные способы, но у меня это не работает. Во-вторых, я получаю сообщение об ошибке, когда пользователь пытается забронировать номер дважды. Можно ли как-нибудь решить эту ошибку: Вот мой код и отображаемые ошибки:

def RoomBookingView(request,pk):
    if request.method == 'POST':
        if pk:
             room_id = Room.objects.get(pk = pk)
             student_id = request.user
             
             reservation = Reservation(
             room_id = room_id.id,
             student_id = student_id.id,
             
             )
             reservation.save()
             room_id.is_reserved =  True
             return redirect('confirm')
    return render(request,'room-detail.html',{})

class Reservation(models.Model):
    student = models.OneToOneField(User,on_delete=models.CASCADE)
    room = models.ForeignKey(Room, on_delete = models.CASCADE)
    start_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = 'Reservation'
        verbose_name_plural = 'Reservations'
        
def RoomBookingView(request,pk):
    if request.method == 'POST':
        if pk:
             room_id = Room.objects.get(pk = pk)
             student_id = request.user
             
             reservation = Reservation(
             room_id = room_id.id,
             student_id = student_id.id,
             
             )
             reservation.save()
             room_id.is_reserved =  True
             return redirect('confirm')
    return render(request,'room-detail.html',{})
class Room(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200,null=True,blank=True,unique=True)
    price = models.IntegerField() 
    hostel = models.ForeignKey(Hostel,on_delete=models.CASCADE,null=True)
    number_of_beds = models.IntegerField()
    room_thumbnail = models.ImageField(null=True)
    resized_thumbnail = ImageSpecField(
                                 processors=[ResizeToFill(620, 430)],
                                 format='JPEG',
                                 options={'quality': 60})

    room_type = models.ForeignKey(Category,on_delete=models.CASCADE)
    room_number = models.IntegerField()
    is_reserved = models.BooleanField(default=False)
    description = models.TextField()

    def get_absolute_url(self):
        return reverse('room_detail', args =[ str( self. id)])

    def save(self):
        if not self.slug:
            self.slug = slugify(self.name)
        return super(Room,self).save()
    

    def __str__(self):
        return self.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...