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
функции просмотра:
- диапазон для
hours
равен 25simply because the
endparameter in
range()` API функции не является инклюзивным.
2.поскольку я не знаю характер маршрута (будь то название маршрута, координаты, номера....etc), я оставил это поле для вас внутри цикла, когда я создаю Schedule
объект, как этот route = route
, поэтому имейте это в виду.
Обратите внимание, что я не добавил аргумент date
при создании объекта Schedule
внутри цикла, просто потому что поле в модели Schedule
в models.py
имеет auto_add_now
значение True
, что означает, что дата автоматически добавляется на основе часового пояса, установленного в settings.py
после создания объекта внутри цикла.
Надеюсь, это помогло!