在django中保存多个EchoiceField

在django中保存多个EchoiceField,django,Django,我试图从MultipleChiceField保存数据,但只保存了一项。当只有一个项目没有问题时,当有多个项目时,只有最后一个项目保存 型号.py class Reservation( models.Model): date_de_reservation = models.DateTimeField('Date de reservation', auto_now = True) type_enseignement = models.CharField('Type enseignem

我试图从MultipleChiceField保存数据,但只保存了一项。当只有一个项目没有问题时,当有多个项目时,只有最后一个项目保存

型号.py

class Reservation( models.Model):
    date_de_reservation = models.DateTimeField('Date de reservation', auto_now = True)
    type_enseignement = models.CharField('Type enseignement', max_length = 10, choices = (("cm", "CM"), ("td", "TD"), ("tp", "TP"), ("tc","TC")), )
    date_du_jour_reserve = models.DateField("Date du jour reservé")
    plage_horaire = models.ForeignKey("Plage_Horaire", on_delete = models.CASCADE )
    cours = models.ForeignKey(Cours, on_delete = models.CASCADE)
    enseignant = models.ForeignKey(Enseignant, on_delete = models.CASCADE)
    sallecours = models.ForeignKey(SalleCours, on_delete = models.CASCADE, blank = True, null = True)
    option = models.ForeignKey(Option,on_delete = models.CASCADE )
    valide = models.BooleanField(blank = True, default = False)
    analyse = models.BooleanField(blank = True , default =False )
class Reservation_Form(forms.ModelForm):
    faculte=forms.ModelChoiceField(label="Faculte", queryset=Faculte.objects.all())
    departement=forms.ModelChoiceField(label="Département", queryset=Departement.objects.all())
    filiere=forms.ModelChoiceField(label="Filière", queryset=Filiere.objects.all())
    niveau = forms.ModelChoiceField(label = 'Niveau', queryset = Niveau.objects.all() )
    option=forms.ModelChoiceField(label="Option", queryset=Option.objects.all())
    semestre=forms.ModelChoiceField(label='Semestre', queryset=Semestre.objects.all())
    plage_horaire = forms.ModelMultipleChoiceField(label="", queryset = Plage_Horaire.objects.all())
class Meta:
    model=Reservation
    exclude=('date_de_reservation', 'sallecours', 'valide', 'enseignant','plage_horaire' )
    widgets={
        'date_du_jour_reserve': DateInput(),            
    }
def reservation(request):
    f=Reservation_Form()
    if request.method=='POST':
        f=Reservation_Form(request.POST)
        print (f.is_valid())
        print(request.POST.getlist('plage_horaire') )
        if f.is_valid() :
            res = f.save(commit=False)

            plage_horaire = f.cleaned_data['plage_horaire']
            for i in plage_horaire:
                res.plage_horaire=i
            res.save()
            return redirect('configuration:ma_reservation')
forms.py

class Reservation( models.Model):
    date_de_reservation = models.DateTimeField('Date de reservation', auto_now = True)
    type_enseignement = models.CharField('Type enseignement', max_length = 10, choices = (("cm", "CM"), ("td", "TD"), ("tp", "TP"), ("tc","TC")), )
    date_du_jour_reserve = models.DateField("Date du jour reservé")
    plage_horaire = models.ForeignKey("Plage_Horaire", on_delete = models.CASCADE )
    cours = models.ForeignKey(Cours, on_delete = models.CASCADE)
    enseignant = models.ForeignKey(Enseignant, on_delete = models.CASCADE)
    sallecours = models.ForeignKey(SalleCours, on_delete = models.CASCADE, blank = True, null = True)
    option = models.ForeignKey(Option,on_delete = models.CASCADE )
    valide = models.BooleanField(blank = True, default = False)
    analyse = models.BooleanField(blank = True , default =False )
class Reservation_Form(forms.ModelForm):
    faculte=forms.ModelChoiceField(label="Faculte", queryset=Faculte.objects.all())
    departement=forms.ModelChoiceField(label="Département", queryset=Departement.objects.all())
    filiere=forms.ModelChoiceField(label="Filière", queryset=Filiere.objects.all())
    niveau = forms.ModelChoiceField(label = 'Niveau', queryset = Niveau.objects.all() )
    option=forms.ModelChoiceField(label="Option", queryset=Option.objects.all())
    semestre=forms.ModelChoiceField(label='Semestre', queryset=Semestre.objects.all())
    plage_horaire = forms.ModelMultipleChoiceField(label="", queryset = Plage_Horaire.objects.all())
class Meta:
    model=Reservation
    exclude=('date_de_reservation', 'sallecours', 'valide', 'enseignant','plage_horaire' )
    widgets={
        'date_du_jour_reserve': DateInput(),            
    }
def reservation(request):
    f=Reservation_Form()
    if request.method=='POST':
        f=Reservation_Form(request.POST)
        print (f.is_valid())
        print(request.POST.getlist('plage_horaire') )
        if f.is_valid() :
            res = f.save(commit=False)

            plage_horaire = f.cleaned_data['plage_horaire']
            for i in plage_horaire:
                res.plage_horaire=i
            res.save()
            return redirect('configuration:ma_reservation')
视图.py

class Reservation( models.Model):
    date_de_reservation = models.DateTimeField('Date de reservation', auto_now = True)
    type_enseignement = models.CharField('Type enseignement', max_length = 10, choices = (("cm", "CM"), ("td", "TD"), ("tp", "TP"), ("tc","TC")), )
    date_du_jour_reserve = models.DateField("Date du jour reservé")
    plage_horaire = models.ForeignKey("Plage_Horaire", on_delete = models.CASCADE )
    cours = models.ForeignKey(Cours, on_delete = models.CASCADE)
    enseignant = models.ForeignKey(Enseignant, on_delete = models.CASCADE)
    sallecours = models.ForeignKey(SalleCours, on_delete = models.CASCADE, blank = True, null = True)
    option = models.ForeignKey(Option,on_delete = models.CASCADE )
    valide = models.BooleanField(blank = True, default = False)
    analyse = models.BooleanField(blank = True , default =False )
class Reservation_Form(forms.ModelForm):
    faculte=forms.ModelChoiceField(label="Faculte", queryset=Faculte.objects.all())
    departement=forms.ModelChoiceField(label="Département", queryset=Departement.objects.all())
    filiere=forms.ModelChoiceField(label="Filière", queryset=Filiere.objects.all())
    niveau = forms.ModelChoiceField(label = 'Niveau', queryset = Niveau.objects.all() )
    option=forms.ModelChoiceField(label="Option", queryset=Option.objects.all())
    semestre=forms.ModelChoiceField(label='Semestre', queryset=Semestre.objects.all())
    plage_horaire = forms.ModelMultipleChoiceField(label="", queryset = Plage_Horaire.objects.all())
class Meta:
    model=Reservation
    exclude=('date_de_reservation', 'sallecours', 'valide', 'enseignant','plage_horaire' )
    widgets={
        'date_du_jour_reserve': DateInput(),            
    }
def reservation(request):
    f=Reservation_Form()
    if request.method=='POST':
        f=Reservation_Form(request.POST)
        print (f.is_valid())
        print(request.POST.getlist('plage_horaire') )
        if f.is_valid() :
            res = f.save(commit=False)

            plage_horaire = f.cleaned_data['plage_horaire']
            for i in plage_horaire:
                res.plage_horaire=i
            res.save()
            return redirect('configuration:ma_reservation')

您不能保存多个值,因为您只有一个字段可将此值放入

当您这样做时:

for i in plage_horaire:
    res.plage_horaire=i
你的每一个cicle都覆盖了你的价值

为此,您需要在
plage_horaire
中设置一个
ManyToManyField

更多信息请访问