Django formset에서 초기 데이터를 구현하는 데 어려움이 있습니다.Django formset의 부분 데이터를 미리 채우기
문맥 상, 나는 학생 목록이 존재하며 매일 출석을 평가해야하는 출석 앱을 만들고 있습니다.
내가 뭘하려고하는 것은 관리자가 날짜가 나열된 링크를 클릭하도록하는 것입니다. 그런 다음 데이터 그리드로 이동하여 각 행은 4 열 (학생 이름, 날짜, 현재/부재 드롭 다운, 메모 필드)과 함께 시스템의 학생 수를 나타냅니다. 목표는 학생 이름 필드에 Student 모델의 학생 목록이 미리 채워지도록하고, 날짜 필드는 사용자가 클릭 한 링크의 날짜와 출석 및 메모 필드를 사용자 입력으로 미리 채 웁니다.
어떤 도움이 많이
감사 감사하겠습니다!
- 나는 당신의 질문 의도 된 방법을 이해하면
Student model
class Student(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
GENDER_CHOICES = (
('male', 'male'),
('female', 'female'),
)
gender = models.CharField(max_length=12, choices=GENDER_CHOICES, null=False, blank=False)
date_of_birth = models.DateField(auto_now=False, auto_now_add=False)
@property
def full_name(self):
return ''.join([self.first_name, '_', self.last_name])
def __unicode__(self):
return self.full_name
Attendance model
class Attendance(models.Model):
student = models.ForeignKey('students.Student')
attendance_date = models.DateField(auto_now=False, auto_now_add=False)
STATUS_CHOICES = (
('present', ‘1’),
('absent', ‘0’),
)
status = models.CharField(max_length=12, choices=STATUS_CHOICES, null=False, blank=False)
notes = models.CharField(max_length=300, null=True, blank=True)
class Meta:
unique_together = ("student", "attendance_date")
def __unicode__(self):
return self.student
Attendance form
class AttendanceForm(forms.ModelForm):
class Meta:
model = Attendance
fields = ["student","attendance_date", "status", "notes"]
View
def add_attendance(request):
s = Student.objects.all().values()
AttendanceFormSet = formset_factory(AttendanceForm, extra=0)
formset = AttendanceFormSet(request.POST or None, initial=s)
if formset.is_valid():
try:
instance = form.save(commit=False)
instance.save()
return HttpResponseRedirect('/')
except:
return HttpResponseRedirect('/')
context = {
"formset": formset,
}
return render(request, "group_attendance.html", context)
Template
<table id="formset" class="form">
{{ formset.management_form }}
{% for form in formset.forms %}
{% if forloop.first %}
<thead><tr>
{% for field in form.visible_fields %}
<th>{{ field.label|capfirst }}</th>
{% endfor %}
</tr></thead>
{% endif %}
<tr>
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>