Django: Генерирование нескольких случайных времен

У меня есть класс Schedule, в котором есть даты, маршруты и время. У меня проблема с генерацией случайного времени. Я видел это, (Create random time stamp list in python), но это только генерирует случайное время, которое имеет только минутный промежуток каждый.

Вот как я сделал свой, который очень прост:

no_of_route = int(request.POST.get('no_of_route'))
time = random.sample(range(1, 24), no_of_route)

Но это просто целое число, а я хотел иметь результаты вроде 9:30, 1:45 и так далее. Минимальное и максимальное время не нужно. Возможно ли такое? Я новичок в этом деле, поэтому не уверен, как именно это сделать. Спасибо за помощь.

Я основываю свое предположение на том, что у вас есть модель django в models.py, которая имеет 3 поля route,date,time, и поэтому вы хотите создать несколько объектов для этой модели на основе no_of_routes.

Что касается генерации случайного времени, есть несколько методов, которые специально генерируют время для вас, однако я собираюсь использовать random.sample(), поскольку вы, кажется, знакомы с ним. Во-первых, вам нужно задать 2 переменные для времени, одну для hour, а другую для minutes, чтобы случайно сгенерированные числа были такими, например 9 , 12, теперь это 2 случайных числа, чтобы представить эти числа как время, мы можем использовать некоторую математику, чтобы преобразовать эти числа в объект time, используя datetime.time() api:

Вот пример модели:

# in models.py

class Schedule(models.Model):
    route = models.CharField()
    date = models.DateField(auto_now_add =True) # this is used to represent date object (datetime.date)
    time = models.TimeField() # this is used to represent time object (datetime.time)
    

в файле views.py


# in views.py

def schedule_view(request):
    no_of_routes = int(request.POST('no_of_routes'))

    hours,mins= random.sample(range(1,25), no_of_routes),
    random.sample(range(0,61),no_of_routes)
    
    for i in range(no_of_routes):
        time = datetime.time(hours[i],mins[i],0) #last index represent "seconds"
        schedule_obj = models.Schedule.objects.create(time=time, route = route)

Обратите внимание на 2 вещи о schedule_view функции просмотра:

  1. диапазон для hours равен 25simply because theendparameter inrange()` API функции не является инклюзивным.

2.поскольку я не знаю характер маршрута (будь то название маршрута, координаты, номера....etc), я оставил это поле для вас внутри цикла, когда я создаю Schedule объект, как этот route = route, поэтому имейте это в виду.

Обратите внимание, что я не добавил аргумент date при создании объекта Schedule внутри цикла, просто потому что поле в модели Schedule в models.py имеет auto_add_now значение True, что означает, что дата автоматически добавляется на основе часового пояса, установленного в settings.py после создания объекта внутри цикла.

Надеюсь, это помогло!

Вернуться на верх