码迷,mamicode.com
首页 > 其他好文 > 详细

Django补充

时间:2018-11-20 23:05:15      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:pen   code   字段   not   tst   query   work   span   model   

modelformset_factory批量渲染表单

引入

from django.forms.models import modelformset_factory

视图函数

    def get(self, request, class_study_record_id):
        model_formset_cls = modelformset_factory(model=StudentStudyRecord, form=StudentStudyRecordModelForm, extra=0)
        # extra用户扩展添加为0则不显示添加
        queryset = StudentStudyRecord.objects.filter(classstudyrecord=class_study_record_id)
        formset = model_formset_cls(queryset=queryset)
        return render(request, "study/StudentScore.html", {"formset": formset})

模板

{{ formset.management_form }}
# 使用前必须先添加这句代码
{% for form in formset %}
 <tr>
    <td>{{ forloop.counter }}</td>
    <td>{{ form.instance.student }}</td>
   #加instance是用来只显示内容而不显示表单控件
    <td>{{  form.instance.get_record }}</td>
    <td>{{ form.score }} </td>
    <td>{{ form.homework_note }}</td>
 </tr>

 {% endfor %}    

model中的自定义get方法

    def get_record(self):
        status_color = {
            "checked": "#66CD00",
            "vacate": "#B03060",
            "absence": "#FF3030",
            "late": "#FF4040",
            "leave_early": "#FF69B4"
        }
        return mark_safe("<span style=‘background-color:%s;color:white‘>%s</span>" %
                         (status_color[self.record], self.get_record_display()))

其中record为表中字段,目的可以实现在模板渲染中给record字段添加额外的样式

字典打散

Record.objects.filter(record=record_id)

如上在视图函数中进行filter过滤时,其括号内必须是表内的字段,不能使用参数

xxx = "record"
Record.objects.filter(xxx=record_id)

这样 ↑ 就会报错,所以解决的方式是使用字典打散,以及Q函数,字典打散简洁但是局限在只能是且的关系,或的关系就只能用Q函数

代码如下:

xxx = "record"
dict = {}
dict["xxx"] = "record"
Record.objects.filter(**dict)

 Q函数

以搜索为例

# 搜索
        val = request.GET.get(q)  # 获取搜索条件
        field = request.GET.get(field)  # 获取搜索范围
        if val:
            q = Q()
            q.children.append((field + "__contains", val))  # 注意必须是元组 元组内的两个分别为: 表内字段 and 筛选条件
            customer_list = customer_list.filter(q)

 视图函数相关

post请求结束使用redirect重定向会当前页面时,同样可以返回self.get(),通过get请求实现

 

Django补充

标签:pen   code   字段   not   tst   query   work   span   model   

原文地址:https://www.cnblogs.com/jiaqi-666/p/9991898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!