2017-09-05 4 views
0

Comment créer plusieurs enregistrements à partir d'un même formulaire?Créer plusieurs enregistrements dans la base de données à partir d'une seule soumission de formulaire dans Django

Dans mon application, un administrateur gère plusieurs 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(... 

Supposons qu'un administrateur gère 10 routes. Ce que je veux, c'est pour un administrateur de commencer chaque jour en créant un horaire quotidien en soumettant un formulaire avec une date. Lors de la soumission, je veux créer 10 enregistrements dans la base de données, un pour chaque route. Les 10 enregistrements auront la même date que celle indiquée sur le formulaire, mais chacun aura un pilote et un itinéraire différents.

Je sais comment ajouter des informations statiques à un seul disque, mais je ne sais pas comment:

  1. Créer 10 enregistrements à partir d'un seul poste
  2. changer Dynamiquement un champ (c.-à-conducteur, route) pour chaque enregistrement.

Actuellement, la vue ressemble à ceci. Tous les enregistrements ont l'étape = 1:

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

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

Des idées? Merci.

+1

Le code de forme est plus important ici. Et pour commencer, jetez un oeil à [formsets] (https://docs.djangoproject.com/fr/1.11/topics/forms/modelforms/#model-formsets) – Melvyn

Répondre

0

Que diriez-vous d'utiliser for-loop pour cela? Comme ceci:

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)