簡體   English   中英

當某個時間值從false回到true

[英]when a certain time value comes from false back to true

我需要在它出現leave_date room_bool == True /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的 model 或您喜歡的名稱。 然后,如果有人預訂 - 創建 object。房間可以使用方法檢查預訂。

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

class Room(...):
    ...

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

或者使用類似apscheduler的東西。 更長的方法是使用Celery ,但僅當您計划在許多應用程序中執行大量此類操作時才使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM