我为我的事件模块创建了一个刷新函数,如果事件日期已经过了,它会将状态批量更新为0. models.py

class Events(models.Model):
    id = models.AutoField(db_column='id', primary_key=True)
    title = models.CharField(max_length=45, blank=True, null=True)
    venue = models.CharField(max_length=45, blank=True, null=True)
    date = models.DateTimeField(max_length=45, blank=True, null=True)
    description = models.CharField(max_length=255, blank=True, null=True)
    image = models.ImageField(upload_to=eventpath, blank=True, null=True)
    manager = models.CharField(max_length=100, blank=True, null=True)
    attendees = models.CharField(max_length=100, blank=True, null=True)
    date_posted = models.DateTimeField(max_length=45, blank=True, null=True)
    status = models.BooleanField(default=1)

这就是我添加事件的方式.

def uploadEvent(request):
    if request.method == "POST":
        item = Events()
        item.title = request.POST.get('title')
        item.venue = request.POST.get('venue')
        date = request.POST.get('date')
        date_object = datetime.datetime.strptime(date, '%a %b %d %Y %I:%M %p')
        item.date = date_object
        item.manager = request.POST.get('manager')
        item.attendees = request.POST.get('attendees')
        item.description = request.POST.get('description')
        date_posted = datetime.datetime.strptime(date, '%a %b %d %Y %I:%M %p')
        item.date_posted = date_posted
        if len(request.FILES) != 0:
            item.image = request.FILES['image']

        item.save()
        return redirect('/amsai/events/')

    return render(request, 'admin/events_add.html')

这就是我想要更新所有事件的方式.我把obj.date换成了date()

def refreshEvent(request):
   events = Events.objects.all()
   status = 0
   date = datetime.datetime.today().date()
   if events:
       for obj in events:
           if obj.date.date() < date:
               Events.objects.filter(*****).update(status=status)
   return redirect('/amsai/events/')

问题是,我如何过滤那些已通过的日期?我不知道在Filter()中写什么.

推荐答案

这是渐近更有效率的.

def refreshEvent(request):
    Events.objects.filter(date__lt=datetime.now()).update(status=False)
    return redirect('/amsai/events/')

filter()现在直接执行数据库查找并生成包含EventsQuerySet,使得Events.date__lt(小于)datetime.now().

别担心,QuerySet是懒惰的,所以在调用update()之前,filter()产生的QuerySet甚至不会被计算.

Python相关问答推荐

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何比较numPy数组中的两个图像以获取它们不同的像素

比较2 PD.数组的令人惊讶的结果

'discord.ext. commanders.cog没有属性监听器'

在Google Colab中设置Llama-2出现问题-加载判断点碎片时Cell-run失败

通过Selenium从页面获取所有H2元素

如何列举Pandigital Prime Set

pyscript中的压痕问题

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

计算分布的标准差

使用Python查找、替换和调整PDF中的图像'

Python全局变量递归得到不同的结果

如何找出Pandas 图中的连续空值(NaN)?

无法在Spyder上的Pandas中将本地CSV转换为数据帧

如何过滤组s最大和最小行使用`transform`'

查看pandas字符列是否在字符串列中

设置索引值每隔17行左右更改的索引

如何在微调Whisper模型时更改数据集?

是否将列表分割为2?

如何从具有完整层次数据的Pandas框架生成图形?