Когда определенное значение времени переходит от false обратно к true

Мне нужно сделать так, чтобы это происходило автоматически, когда наступает leave_date(оставленная дата) room_bool == True сейчас это все делается через urls.py /get/by/<int:pk>

views.py

    date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    reg = Registration.objects.get(rooms_id=pk)
    room = Rooms.objects.get(pk=pk)
    a = reg.leave_date.replace(tzinfo=None) >= datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S').replace(
        tzinfo=None)
    if a != True:
        reg.room_bool = True
        reg.save()
        room.room_bool = True
        room.save()

models.py

    room_num = models.IntegerField()
    room_bool = models.BooleanField(default=True) #if room_bool = True room is open, else closed.
    category = models.CharField(max_length=150)

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

    class Meta:
        verbose_name = 'Room'

#This class Registration for visitors, to open room for the them
class Registration(models.Model):
    rooms = models.ForeignKey(Rooms, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    admin = models.ForeignKey(User, on_delete=models.CASCADE)
    pasport_serial_num = models.CharField(max_length=100)
    birth_date = models.DateField()
    img = models.FileField()
    visit_date = models.DateTimeField()
    leave_date = models.DateTimeField()
    guest_count = models.IntegerField()

    def func(self):
        room = Rooms.objects.filter(room_bool=True)
        for i in room:
            if i.room_num == int(self.rooms):
                i.room_bool = False #this should change when adding new registration
                i.save()

Вам нужно что-то для контроля времени, этого нелегко достичь.

Более простой способ - создать модель под названием Reservation или что-то другое, что вы предпочитаете. Затем, если кто-то зарезервировал комнату - создайте этот объект. Комната может проверить резервирование с помощью методов.

class Reservation(...):
    room = models.ForeignKey(...)
    start_date = ...
    end_date = ...
    ...

class Room(...):
    ...

def is_avaiable(self, date):
    return not self.reservation_set.filter(start_date__gte=date, end_date__lte=date)

В качестве альтернативы используйте что-то вроде apscheduler. Более длинный путь - использовать Celery, но используйте его только если вы планируете иметь много действий, подобных этому, во многих приложениях.

Вернуться на верх