0

How can I create several records from a single form?

In my application, an administrator manages several routes.

models.py

class Route(models.Model):
    milage = models.PositiveSmallIntegerField(...
    fuel = models.PositiveSmallIntegerField(...
    start_time = models.DateTimeField(...
    route_time = models.DateTimeField(...
    date = models.DateTimeField(...

class Driver(models.Model):
    driver = models.CharField(max_length...
    usual_route = models.ForeignKey(Route)

class Daily(models.Model):
    date = models.DateTimeField(...
    route = models.ForeignKey(Route)
    driver = models.ForeignKey(Driver)
    stage = models.PositiveSmallIntegerField(...

Assume that an administrator manages 10 routes. What I want is for an administrator to start each day by creating a daily schedule by submitting a form with a date. On submission, I want to create 10 records in the database, one for each route. All 10 records will have the same date as submitted on the form, but each will have a different driver and route.

I know how to add static information to a single record but I don't know how to:

  1. Create 10 records from a single post
  2. Dynamically change a field (i.e. driver, route) for each record.

Currently the view looks like this. All records have stage = 1:

class DailySchedule(CreateView):
    model = Daily
    form class = ...

    def form_valid(self, form):
        instance = form.save(commit = False)
        instance.stage = 1

Any ideas? Thanks.

MD. Khairul Basar
  • 4,976
  • 14
  • 41
  • 59
William
  • 115
  • 1
  • 2
  • 12
  • 1
    The form code is more important here. And to start you of, have a look at [model formsets](https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#model-formsets) –  Sep 05 '17 at 04:29

1 Answers1

-1

How about using for-loop for it? Like this:

for i in range(10):
    route, _ = Route.objects.get_or_create(...)
    driver, _ = Driver.objects.get_or_create(..., usual_route=route)
    daily = Daily.objects.create(..., route=route, driver=driver)
amarynets
  • 1,765
  • 10
  • 27