Django 使用 modelformset 组件批量修改表单数据

1.models.py:
class StudentStudyRecord(models.Model):    ‘‘‘    学生学习记录    ‘‘‘    student = models.ForeignKey(verbose_name="学员", to=‘Student‘,on_delete=models.CASCADE)    classstudyrecord = models.ForeignKey(verbose_name="第几天课程", to="ClassStudyRecord",on_delete=models.CASCADE)    record_choices = ((‘checked‘, "已签到"),                      (‘vacate‘, "请假"),                      (‘late‘, "迟到"),                      (‘noshow‘, "缺勤"),                      (‘leave_early‘, "早退"),                      )    record = models.CharField("上课纪录", choices=record_choices, default="checked", max_length=64)    score_choices = ((100, ‘A+‘),                     (90, ‘A‘),                     (85, ‘B+‘),                     (80, ‘B‘),                     (70, ‘B-‘),                     (60, ‘C+‘),                     (50, ‘C‘),                     (40, ‘C-‘),                     (0, ‘ D‘),                     (-1, ‘N/A‘),                     (-100, ‘COPY‘),                     (-1000, ‘FAIL‘),                     )    score = models.IntegerField("本节成绩", choices=score_choices, default=-1)    homework_note = models.CharField(verbose_name=‘作业评语‘, max_length=255, blank=True, null=True)    note = models.CharField(verbose_name="备注", max_length=255, blank=True, null=True)

    homework = models.FileField(verbose_name=‘作业文件‘, blank=True, null=True, default=None)    stu_memo = models.TextField(verbose_name=‘学员备注‘, blank=True, null=True)    date = models.DateTimeField(verbose_name=‘提交作业日期‘, auto_now_add=True)

    def __str__(self):        return "{0}-{1}".format(self.classstudyrecord, self.student)

    class Meta:        unique_together=["student","classstudyrecord"]
2.views.pyfrom django.forms import modelform#对学生记录表建立一个modelformclass StudentStudyRecordForm(forms.ModelForm):    class Meta:        model = models.StudentStudyRecord        fields = ["score","homework_note"] #要在前端修改的字段

#批量修改的学生成绩视图类class RecordScoreView(View):

    def get(self, request, csr_id):

        from django.forms.models import modelformset_factory#导入组件!

        model_formset_cls = modelformset_factory(model=models.StudentStudyRecord,form=StudentStudyRecordForm,extra=0)#把数据库表实例化一个对象

        queryset = models.StudentStudyRecord.objects.filter(classstudyrecord=csr_id)

        formset = model_formset_cls(queryset=queryset)

        return render(request, ‘student/record_score.html‘, locals())

    def post(self, request, csr_id):        from django.forms.models import modelformset_factory        model_formset_cls = modelformset_factory(model=models.StudentStudyRecord,form=StudentStudyRecordForm,extra=0)        queryset = models.StudentStudyRecord.objects.filter(classstudyrecord=id)        formset = model_formset_cls(request.POST)#提交post请求,校验成功直接保存.        if formset.is_valid():            formset.save()        return self.get(request, csr_id=csr_id)

3.html:
    <div class="panel panel-default">        <div class="panel-heading">学习记录</div>        <div class="panel-body">            <div style="width: 680px;margin: 0 auto;">                <form method="post" action="">                    {% csrf_token %}                    {{ formset.management_form }}  #后端使用modelformset组件时,前端必须加上这一句话!

                    <table class="table table-bordered">                        <thead>                        <tr>                            <th>姓名</th>                            <th>考勤</th>                            <th>作业成绩</th>                            <th>作业评语</th>                        </tr>                        </thead>                        <tbody>                        {% for form in formset %}                            <tr>                                {{ form.id }}                                <td>{{ form.instance.student }}</td>   #instance加上,前端渲染的页面就没有这个修改项                                <td>{{ form.instance.get_record_display }} </td>                                <td>{{ form.score }} </td>                                <td>{{ form.homework_note }}</td>                            </tr>                        {% endfor %}                        </tbody>                    </table>                    <input type="submit" value="保存" class="btn-danger">                </form>            </div>        </div>

    </div></div>


原文地址:https://www.cnblogs.com/cou1d/p/12208429.html

时间: 2024-08-01 17:58:55

Django 使用 modelformset 组件批量修改表单数据的相关文章

jquery.form插件中动态修改表单数据

jquery.form jquery.form插件(http://malsup.com/jquery/form/)是大家经常会用到的一个jQuery插件,它可以很方便将表单转换为ajax的方式进行提交.以下是官网给出的一个栗子: $(document).ready(function() { var options = { target: '#output1', // target element(s) to be updated with server response beforeSubmit

Django学习笔记(五)—— 表单

疯狂的暑假学习之  Django学习笔记(五)-- 表单 参考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path                                 除域名以外的请求路径,斜杠开头                      "/hello/" request.get_host()                      主机名                              

利用shell脚本批量修改表

最近公司里因为开发新功能,程序员需要快速在某一个库里的所有表添加字段,于是就用shell脚本简单快速实现批量修改表添加字段 #!/bin/bash export mysql_bin=/usr/local/mysql/bin export database=database export tables=`$mysql_bin/mysql -Bse "use ${database};show tables;"` for i in ${tables}         do          

mysql表名等大小写敏感问题、字段类型timestamp、批量修改表名、oracle查询历史操作记录等

mysql表名等大小写敏感问题:http://blog.csdn.net/postnull/article/details/72455768: 1 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 2 1.数据库名与表名是严格区分大小写的: 3 2.表的别名是严格区分大小写的: 4 3.列名与列的别名在所有的情况下均是忽略大小写的: 5 4.字段内容默认情况下是大小写不敏感的. ================================================

使用jquery修改表单的提交地址

基本思路: 通过使用jquery选择器得到对应表单的jquery对象,然后使用attr方法修改对应的action 示例程序一: 默认情况下,该表单会提交到page_one.html 点击button之后,表单的提交地址就会修改为page_two.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>jquery test</title> &

PHP 批量修改表名前缀

很多时候我们写项目时,都会给不同项目所用到的表名加上统一的前缀,这个也给将来迁移项目带来一定的麻烦. 有时可能的你迁移的目标数据库已经有了其它的项目存在,而且它们的表前缀又刚好跟你的一样,这样能怎么办,只能后来的迁就一下,改吧! 下面是我写的一段批量修改表前缀的代码,供大家参考一下,希望对大家有所帮助. PHP代码 1 <?php 2 3 $old_pre = @$_GET['old_pre']; // 原表前缀 4 $new_pre = @$_GET['new_pre']; // 新表前缀 5

基于jQuery会员中心安全修改表单代码

基于jQuery会员中心安全修改表单代码.这是一款登录密码,交易密码,手机号码,实名认证,电子邮箱,安全设置表单,会员表单等设置代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="Safety"> <dl> <dt> <strong>登录密码:</strong> <span>保障账户安全,建议您定期更换密码</span> <b><span

控制表单控件-修改表单的提交方法

代码: —————————————————————————— <script type="text/javascript">            //修改表单的提交方法            function modifyMethod(){                var f = document.forms[0];            //获取表单DOM                var method = f.myMethod.value;    //选择的

批量修改表注释

一:业务应用场景 1.测试环境执行重新建表,导致表注释乱码 2.数据已导入,数据中不存在中文字符 二:批量修改表注释乱码语句 select concat("ALTER TABLE ","`",col.TABLE_NAME,"`"," CHANGE ","`",col.COLUMN_NAME,"`"," ","`",col.COLUMN_NAME,&