首页 > 解决方案 > 为模型查询集生成随机时间

问题描述

我正在尝试在 20 小时之间生成随机时间,现在,并将其分配给所有查询集传递 24 小时。

这是我做的:

from faker import Faker
fake = Faker()
from blogs.models import Post
from django.utils import timezone
import datetime

def rotate_time():
    now = timezone.now()
    day_pass = now - datetime.timedelta(hours=24)
    qs = Post.objects.filter(created__lt=day_pass)
    number = qs.count()
    lst = []
    for _ in range(number):
        for t in [fake.date_time_between(start_date='-20h', end_date='now')]:
            lst.append(t)
    for i in lst:
        print(i) # this work fin until now <==
        x = 0
        while x < len(lst): 
            time = i[x+1]
            if qs.exists():
                for item in qs:
                    item.pud_date_rotation = time
                    item.save() 

TypeError:'datetime.datetime' 对象不可下标

标签: pythondjango

解决方案


这里有几件事是错误的。

首先是导致错误的那个:i不是datetime列表或任何其他可下标类型。这就是i[x+1]引发错误的原因。

其次,如果您尝试遍历查询集中的所有项目并给它们每个随机时间,为什么不只遍历查询集呢?

from faker import Faker
fake = Faker()
from blogs.models import Post
from django.utils import timezone
import datetime

def rotate_time():
    now = timezone.now()
    day_pass = now - datetime.timedelta(hours=24)
    qs = Post.objects.filter(created__lt=day_pass)

    for post in qs:
        post.pud_date_rotation = fake.date_time_between(start_date='-20h', end_date='now')
        post.save()           

如果您想同时发布所有帖子,只需计算循环前的时间,如下所示:

def rotate_time():
    now = timezone.now()
    day_pass = now - datetime.timedelta(hours=24)
    qs = Post.objects.filter(created__lt=day_pass)
    
    time = fake.date_time_between(start_date='-20h', end_date='now')
    for post in qs:
        post.pud_date_rotation = time
        post.save()

推荐阅读