首页 > 解决方案 > 如何在 Django 中部分填充表单集

问题描述

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

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

目标是用学生姓名的列填充所有学生姓名(已经从学生模型保存在数据库中),并且所有行的日期都相同。这样当用户要出勤时,他只需要点击出席的复选框。我发现了一个类似于我的问题,但没有得到解答(在 Django 表单集中预填充部分初始数据)。如果需要,我可以发布我的代码寻求帮助。

任何帮助都感激不尽。

标签: djangodjango-formsdjango-views

解决方案


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

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()}

推荐阅读