У меня есть модель Django, в которой есть введенное пользователем поле с именем reserve_time. Когда пользователь входит и создает (или редактирует) экземпляр класса, я хочу, чтобы функция запускалась и проверяла, во время ли введенного времени время обеда или ужина. Я пытался использовать post_save для этого, но он не работал, оператор печати мог бы сказать, был ли это ужин или нет, но экземпляр класса вообще не изменился бы. Также текущий способ, которым я это делаю Reservation.objects.last()
, работает только в том случае, если я создаю новый экземпляр, а не если я редактирую старый.
models.py:
from django.db import models
import datetime
import operator
from django.utils.timezone import now, localtime
from django.db.models.signals import post_save
# Create your models here.
class Reservation(models.Model):
shift = ''
name = models.CharField(max_length=40)
member_id = models.CharField(max_length=10, default="")
guest_num = models.IntegerField()
reserve_time = models.TimeField(default=datetime.datetime.now)
notes = models.CharField(max_length=100, blank=True)
date_created = models.DateTimeField(default=datetime.datetime.now, blank=True)
def __str__(self):
return f"{self.name} at {self.reserve_time.strftime('%I:%M %p')} ({self.shift}) {self.date_created.strftime('%m/%d/%Y')}"
def model_created_or_updated(sender, **kwargs):
the_instance = kwargs['instance']
reservation = Reservation.objects.last()
if reservation.reserve_time < datetime.time(17, 10, 0):
reservation.shift = 'lunch'
print('lunch')
else:
reservation.shift = 'dinner'
print('dinner')
print('model created/updated')
post_save.connect(model_created_or_updated, sender=Reservation)
Есть ли замена для Reservation.objects.last (), которая просто вызывает указанный экземпляр c, который я изменяю или добавляю? и почему мое изменение переменной shift в операторе if / else на самом деле не меняет его? Моя конечная цель состоит в том, чтобы это работало автоматически при создании / редактировании нового экземпляра.