代码之家  ›  专栏  ›  技术社区  ›  alvaro diego

在实例化表单时,在django中显示标记的chekbox

  •  1
  • alvaro diego  · 技术社区  · 11 月前

    我有以下代码: views.py def realizer_rutina(请求,id_rutina): 如果不是request.user.es_entrenador: messages.error(请求,“未使用任何许可证来访问esta pagina”) 返回重定向('moster_rutina')

    if request.method == 'GET':
        rutina = get_object_or_404(Rutina, id=id_rutina)
        
        rutinaform = RutinaForm(instance=rutina)
    
        contexto = {
            "rutinaform": rutinaform,
        }
        return render(request, 'core/crear_rutina.html', contexto)
    else:
        return HttpResponse('no se pudo actualizar')
    

    型号.py

    DIAS_SEMANA = [
        ('LUN', 'Lunes'),
        ('MAR', 'Martes'),
        ('MIE', 'Miércoles'),
        ('JUE', 'Jueves'),
        ('VIE', 'Viernes'),
        ('SAB', 'Sábado'),
        ('DOM', 'Domingo'),
    ]
    
        class Rutina(models.Model):
            nombre = models.CharField(blank=False)
            dias_entrenamiento = models.CharField(blank=True)
            dias_descanso=models.CharField(blank=True)
            duracion_rutina = models.DurationField(default=datetime.timedelta(days=30), blank=True)
            
            def __str__(self):
                return self.nombre
    

    form.py

    class RutinaForm(forms.ModelForm):
        class Meta:
            model = Rutina
            exclude = ('dias_descanso',)
    
        dias_entrenamiento = forms.MultipleChoiceField(
            choices=DIAS_SEMANA,
            widget=forms.CheckboxSelectMultiple(),
            required=False
        )
    

    当我实例化显示html的表单时,框(chekbox)不会被选中,它们保持空白,我想要的是只选中那些应该用用户发送的实例实例化的框。记住,它保存的训练日是这样的:training_days=['MON','TUE']等。我如何实现这一点??非常感谢。

    我想要的是只选中那些应该用用户发送的实例实例化的框。

    1 回复  |  直到 11 月前
        1
  •  0
  •   willeM_ Van Onsem    11 月前

    让你 dias_entrenamiento JSONField  [Django-doc] :

    def default_dias_entrenamiento():
        return ['MON', 'TUE']
    
    
    class Rutina(models.Model):
        dias_entrenamiento = models.JSONField(default=default_dias_entrenamiento)
        # …

    这允许我们将项目列表保存为JSON blob,但也可以 重建 这通常是取回物品的主要问题。