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) используется для сохранения всех объектов расписания в базе данных в одном запросе.

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