Как частично заполнить форму в Django - PullRequest
0 голосов
/ 29 января 2019

У меня возникают трудности с предварительным заполнением только некоторых полей в наборе форм модели.

Для контекста проект представляет собой приложение для посещаемости, в котором будет сетка со столбцами: имя ученика, дата,и если студент присутствует или нет.

Цель состоит в том, чтобы столбец с именем студента был заполнен всеми именами студентов (уже сохраненными в базе данных из модели студента), и чтобы дата была такой жедля всех строк. Так что, когда пользователь собирается принять участие, он должен только нажать на флажок посещаемости.Я нашел вопрос, похожий на мой, но на него не было ответа ( предварительное заполнение частичных исходных данных в наборе форм Django ).При необходимости я могу опубликовать свои коды для помощи.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 29 января 2019

Я случайно наткнулся на решение, когда возился с кодом.Вот как я это сделал.

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