Так что я пытаюсь понять здесь, как создать форму для каждого из этих элементов, чтобы ее можно было добавить, чтобы добавить примечание к этому одному ученику. Если эта заметка не была заполнена, тогда она получит уведомление об ошибке только для одной заметки. Это просто быстрый пример, который я собрал, чтобы попытаться получить от этого информацию. Я не уверен, какой набор форм мне нужен здесь, который позволит мне отображать всю информацию об объекте экзамена, имея форму там тоже.несколько одинаковых форм на странице
Редактировать: возможно, возможно, у меня есть решение. Я делаю
examscores = Exam.objects.all()
NoteFormset = formset_factory(NoteForm, extra = len(examscores))
notesets = NoteFormset()
examscores_and_forms = zip(examscores, notesets.forms)
Затем в шаблоне я делаю {% для экзамена, формы в examscores_and_forms%} это, кажется, приносит определенные результаты. Мне просто нужно скрыть идентификатор объекта и get_object_or_404, если форма действительна и изменена. Я продолжу позднее это обновление с полным решением.
views.py
def studentscores(request):
examscores = Exam.objects.all()
if request.POST:
form = NoteForm(request.POST)
if form.is_valid():
pass
return HttpResponseRedirect(request.get_full_path())
else:
return render_to_response('exams.html', { 'examscores': examscores, 'form': form }, context_instance=RequestContext(request))
else:
form = NoteForm()
return render_to_response('exams.html', { 'examscores': examscores, 'form': form }, context_instance=RequestContext(request))
models.py
class Student(models.Model):
firstname = models.CharField(max_length=100)
lastname = models.CharField(max_length=100, blank=True, null=True)
def __unicode__(self):
if self.firstname and self.lastname:
fullname = self.firstname + " " + self.lastname
return fullname
else:
return self.firstname
class Note(models.Model):
student = models.ForeignKey(Student)
note = models.TextField()
def __unicode__(self):
return str(self.student)
class Exam(models.Model):
student = models.ForeignKey(Student)
score = models.IntegerField()
def __unicode__(self):
return str(self.student) + " " + str(self.score)
forms.py
class NoteForm(forms.Form):
note = forms.CharField(required=True)
шаблон
{% for exam in examscores %}
<form action="" method="post">{% csrf_token %}
<table>
<tr>
<td>{{ exam.student }}</td>
<td>{{ exam.score }}</td>
</tr>
<tr>
<td>{{ form.as_p }}</td>
<td><button type="submit" name="action" value="addnote" />Note</button></td>
</tr>
</table>
</form>
{% endfor %}
Я только что вернулся, чтобы посмотреть, есть ли какие-либо комментарии по этому поводу. Я на самом деле сейчас смотрел inlineformset_factory. Попытка выяснить, как я могу связать отображение объекта, который разделяет FK с формой, которую я представляю. Мне, возможно, придется изменить мой вышеупомянутый вопрос, чтобы проиллюстрировать это. Спасибо, что вернулись. – bDreadz
Посмотрите на 'form_valid' здесь http://stackoverflow.com/a/26591411/3033586 – madzohan
' как я могу связать отображение объекта, который имеет FK, с формой, которую я представляю, если вы создаете этот объект, и есть другие поля, кроме FK, тогда 'form' из примера должен быть экземпляром вашего класса' object' ModelForm – madzohan