我有一个Django模型,它有一个名为reserve_time的用户输入字段。当用户输入并创建(或编辑)类的一个实例时,我希望运行一个函数,并检查输入的时间是在晚餐还是午餐期间。我一直在尝试使用post_save来做这件事,但是它没有起作用,print语句会告诉我它是否是晚餐,但是类的实例根本不会改变。另外,我目前的方法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()的方法,它只调用我正在更改或添加的特定实例?为什么我在if/else语句中改变变量移位实际上并没有改变它呢?我的最终目标是在任何时候创建/编辑新实例时都能自动工作。
发布于 2020-07-10 08:55:51
你用reservation = Reservation.objects.last()做什么?您有一个向您发送信号的instance
the_instance = kwargs['instance']
if the_instance.reserve_time < datetime.time(17, 10, 0):
the_instance.shift = 'lunch'
print('lunch')
else:
the_instance.shift = 'dinner'
print('dinner')
print('model created/updated')您可以通过其他方式来实现-覆盖模型的save方法
class Reservation(models.Model):
...
def save(self, *args, **kwargs):
if self.reserve_time < datetime.time(17, 10, 0):
self.shift = 'lunch'
print('lunch')
else:
self.shift = 'dinner'
print('dinner')
print('model created/updated')
return super().save(*args, **kwargs)https://stackoverflow.com/questions/62825760
复制相似问题