微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在创建一个学生出勤表,需要根据老师选择一种形式的学生班级从学生模型中获取学生姓名,学生班级和ID的详细信息。我尝试通过对查询数据使用for循环来使用initial来预填充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,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,choices=grade)
    Attendance_date = models.DateField(null=True,auto_Now_add=True,blank=True)
    Attendance_status = models.CharField(choices=attendance,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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。