Django: Выбор нескольких случайных идентификаторов и вставка в базу данных
Я генерирую расписания, и они автоматически выбираются из класса RoutePoint. Я хотел бы POST все эти идентификаторы и создать # строк на основе того, сколько идентификаторов хочет пользователь.
Вот как я выбираю случайные идентификаторы. Но он показывает RoutePoints object (3)
no_of_route = request.POST.get('time')
items = list(RoutePoints.objects.all())
random_route = random.sample(items, no_of_route)[0]
Проблема в том, что я не знаю, как вставить эти идентификаторы. Например, массовая вставка? Если пользователь выбирает 3 no_of_route
, то в таблицу 'Расписание' должно быть вставлено 3 строки.
Schedule.objects.create(route=random_route, report_time=report_time)
Это мой первый раз, поэтому я не уверен, как именно это сделать. Спасибо за помощь.
Вы можете использовать метод Django bulk_create для создания нескольких объектов за один раз.
from django.db import transaction
no_of_route = int(request.POST.get('time')) # make sure to convert to int
items = list(RoutePoints.objects.all())
random_routes = random.sample(items, no_of_route)
schedules_to_create = []
for route in random_routes:
schedule = Schedule(route=route, report_time=report_time)
schedules_to_create.append(schedule)
with transaction.atomic():
Schedule.objects.bulk_create(schedules_to_create)
В этом коде random.sample(items, no_of_route) вернет список из no_of_route количества случайных объектов RoutePoints. Затем для создания списка объектов Schedule (без сохранения их в базе данных) используется list comprehension. Наконец, Schedule.objects.bulk_create(schedules) используется для сохранения всех объектов расписания в базе данных в одном запросе.