如何部分填充Django中的表单集

时间:2019-01-28 23:13:14

标签: django django-forms django-views

我很难仅填充模型表单集中的某些字段。

对于上下文,该项目是一个出勤应用程序,其中将包含一个带有列的网格:学生姓名,日期以及是否有学生在场。

目标是用所有学生姓名(已经从学生模型保存在数据库中)填充具有学生姓名的列,并且所有行的日期都相同。要参加会议,他只需要单击出席复选框即可。 我发现了一个与我的问题类似的问题,但未得到解答(pre-populating partial Initial data in a Django formset)。 如果需要,我可以发布代码以寻求帮助。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我在修改代码时不小心偶然发现了该解决方案。 这是我的方法。

Views.py
def cadastrar_presenca(request, pk):
all_presencas = Presenca.objects.all()
all_alunos = Aluno.objects.filter(turma_id=pk)
all_turmas = Turma.objects.all()
turma = Turma.objects.get(pk=pk)
i = 0
PresencaFormSet = modelformset_factory(Presenca, form=PresencaForm, extra=all_alunos.count())
id_turma = get_object_or_404(Turma, pk=pk)
if request.method == 'GET':
    formset = PresencaFormSet(queryset=Presenca.objects.none())
elif request.method == "POST":
    formset = PresencaFormSet(request.POST)
    if formset.is_valid():
        for form in formset:
            presenca = form.save(commit=False)
            presenca.RA = all_alunos[i]
            presenca.save()
            i = i + 1
        return redirect('/alunos_cursinho') #voltar para a url alunos-cursinho(urls.py)
return render(request, 'cadastrar_presenca.html', {'turma': turma, 'id_turma': id_turma,
                                                   'all_turmas': all_turmas, 'all_alunos': all_alunos,
                                                   'formset':formset, 'all_presencas' : all_presencas})

表格:

class PresencaForm(forms.ModelForm):

class Meta:
    model = Presenca
    fields = ('data', 'Periodo1', 'Periodo2',)
    widgets = {'data': DateInput()}