Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django-如何使用数据库查询结果预填充表单集表单数据?_Django_Django Forms_Formset_Django Formtools - Fatal编程技术网

django-如何使用数据库查询结果预填充表单集表单数据?

django-如何使用数据库查询结果预填充表单集表单数据?,django,django-forms,formset,django-formtools,Django,Django Forms,Formset,Django Formtools,我正在创建一个学生出勤表,其中需要根据教师在一个表中选择学生班级的情况,从学生模型中获取学生姓名、学生班级和Id的详细信息。我曾尝试使用initial通过对查询数据使用for循环在formset中预先填充表单,但是它只填充一条记录的数据。下面是forms.py、models和views.py的代码。有人能帮忙吗 forms.py class student(models.Model): studentid = models.AutoField(primary_key=True)

我正在创建一个学生出勤表,其中需要根据教师在一个表中选择学生班级的情况,从学生模型中获取学生姓名、学生班级和Id的详细信息。我曾尝试使用initial通过对查询数据使用for循环在formset中预先填充表单,但是它只填充一条记录的数据。下面是forms.py、models和views.py的代码。有人能帮忙吗

forms.py

class student(models.Model):
    studentid = models.AutoField(primary_key=True)
    Gender = models.CharField(max_length=6, choices=gender, null=True)
    Name = models.CharField(max_length=100, null=True)
    DOB = models.DateField(null=True)
    Image = models.ImageField(null=True, upload_to='images')
    Status = models.CharField(max_length=10, choices=statchoice, null=True)
    Father_name = models.CharField(max_length=100, null=True)
    Mother_name = models.CharField(max_length=100, null=True)
    Address = models.CharField(max_length=200, null=True)
    Contact_no = models.IntegerField(null=True)
    Email = models.EmailField(null=True)
    Admission_class = models.CharField(max_length=40, null=True, choices=grade)
    Admission_date = models.DateField(null=True)
    Current_class = models.CharField(max_length=40, null=True, choices=grade)
    Leaving_date = models.DateField(null=True, blank=True)
    objects = models.Manager() 
    def __str__(self):
        return str(self.studentid)  

class student_attendance(models.Model):
    Student_ID = models.CharField(max_length=100, null=True)
    Student_Name = models.CharField(max_length=100, null=True)
    Student_class = models.CharField(max_length=100, null=True, choices=grade)
    Attendance_date = models.DateField(null=True, auto_now_add=True, blank=True)
    Attendance_status = models.CharField(choices=attendance, null=True, max_length=10)
    objects = models.Manager() 
Views.py

def student_attend(request):
if request.method == 'POST':
    data = request.POST.get('studentGrade')
    formset_data = student.objects.filter(Current_class=data)
    AttendanceFormSet = formset_factory(std_attendance, extra=(len(formset_data))-1)
    for element in formset_data:
        formset = AttendanceFormSet(initial=[
            {'Student_ID': element.studentid, 'Student_Name':element.Name, 'Student_class':element.Current_class, 'Attendance_status':"Present"}
        ])
    param = {'formset':formset} 
    return render(request, 'home/student_attendance.html', param)     
return render(request, 'home/student_attendance.html')
form.py:

class student_register(ModelForm):
class Meta:
    model = student
    fields = '__all__'

class std_attendance(ModelForm):
class Meta:
    model = student_attendance
    fields = '__all__'

循环中的每次迭代都会覆盖表单集,这就是为什么只填充一个表单的原因,您需要用循环中的所有表单来填充参数:

initial = []
for element in formset_data:
        initial.append({'Student_ID': element.studentid, 'Student_Name':element.Name, 'Student_class':element.Current_class, 'Attendance_status':"Present"}
        
formset = AttendanceFormSet(initial=initial)

如何在下面尝试的模板中进行迭代,我应该使用param还是formset进行迭代。尝试“{%forformset%}{{element.as{p}{%endfor%}”{%csrf{token%}{formset.management{u data}}{%forformset%}{{element.as{p}{%endfor%}”不工作{%csrf{formset.management}{data}{%forformset%}请查看上面答案中的编辑,无需更改模板。如何将此表单集数据保存到数据库。我获取了数据并进行了必要的更改,但不确定如何保存。请尝试:
在formset中的表单:form.save()