ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day77

2019-06-20 12:40:11  阅读:182  来源: 互联网

标签:obj get class day77 pk data id


day77

先做班级学习记录:

点击批量,关于学生的此次学习记录,到班级里面完成成绩的填写

url 写成多份,url路由分发

.html 
+班级学习记录
ulrs.py
url('^class_record ''

views.py
class ClassRecordView(View):
    def get(self,request):
        all_obj = models.CSR.obj.all()
        
admin.py    
study...
.....

customer文件夹

student文件夹

CSR.html

课程记录(存重复)

option  批量创建学生记录
                        

classsr.html

td  record.class_obj   对象,有str方法的话显示名字
td  rec.tec             对象

{%ret_html|safe} 分页

做 1

编辑删除增加都没学下课自己写

form 批量增加学习记录

---clRV
    def post(self,re)
        action = request.POST.get('actionv')
        select_id = request.POST.getlist('select_id')   
        
        if hasattr(self,action):
            ret = getattr(self,action)(select_id)
            #return redirect('url别名')
            return self.get(request)     直接调用get操作减少重定向一遍
    def b_c(self,select_id):
        for cousr_record_id in select_id :  班级课程找属性
            all_stuents  = m.CSR.o.get(pk=c_r_i).class_obj.students.all()   
            for                     all()所有学生
            l1 = []
            for studen in all_s:
                # m.SS.o.cre(stue=stu  ,    csr_id = c_r_i )
            obj = m.SS.o(stue=stu  ,    csr_id = c_r_i )
            l1.ap(obj)
            多对一的写在多地里面,外键
            上课记录-班级-学生-学生记录
            m.S.o.bulk_create(l1)
        
admin.py
class ca..
    list_d = 
    list_e = 
    

amdin做的既可以查看和编辑

公司: 招go的比较多 学go (大型公司)

jingdong ali xinlang toutiao ali: go xuexia

京东 天猫 大型的网站 python搞起来还是比较吃力的

页面上添加

不是点击去编辑,而是直接就可以编辑

class StudyReDetialView(View):
​   def get(self,re,class_recor_id):
        #找到课程记录
        class_r_obj = m.ClaR.o.get(pk = cl_r_i)
        
        # all_st = c_r_o.class_obj.students.all()
​       # 找到这个课程记录所生成的所有学习记录

        mo.SSR.objs.fitler(classstudyrecore = c_r_i  )
        
        ret render(req,'study_record_detail.html')
        
        
        
    学生表和客户信息表 1对1 关系    get_record_display显示元祖设置的中文
    
    
st/s_r_d.html
--url
#学详
url(r'^s_r//'',v.S.as_view(),)

moderform和form 只能生成一条表单 不能生成多条表单 同时放这一块提交

自己写

考勤:有一个系统,别人填好了

成绩:可以自己写

for choice in c_s:
    option { vlaue= cho.0 selected} cho.1 默认选中
    else : 
html
post ‘’ 当前页面
def post(self,request):
    html网页里加标识 sore_{{pk}}  
    data = re.Post
#   data.pop('csrf')
    for key,val in request.POST.items():
        print(key,val)   scrf :  ...  score_1 90  homo_note_1 111
        
        字符串分割
            field,pk = key.rsplit('_',1)    
            print(field,pk)
            
        正则_数可以
        
        
        
        
错误 1

The Querydict not immable 不可修改 :深拷贝

if key = 'csrf':
    continue
field,pk = key.rsplit('_',1)        # score   1 
models.SSR.obj.filter(pk=pk).update()
models.SSR.obj.filter(**{pk:pk}).update()    默认都是and的关系,所有的这些,因为键值对

models.SSR.obj.filter(**{pk:pk}).update(**{field:val})  
所有的函数都是玩的基础,传参。。。。
return self.get(request,c_re_i) 
return redirect(rever('sty_decor'),args=(clla_re_id))

需要四次循环,二个相同的update两次,效率降低

改数据结构,一次执行

{1:{‘score’ : 88,'HOmewo':'333'},

2:{‘score’ : 88,'HOmewo':'333'}}

data_dict = {}

....
if pk in data_dict :

    #data_dict[pk] = {
    field : val , 
    }
    
    data_dict[pk][field] = val
else:
    data_dict[pk] = {
    field : val , 
}
for spk,data in data_dict.items():
    models.SSR.o.value(**{pk:pk}).f(**{**data})

先查后更新

如果还觉得不好,用原生sql同时执行多条语句的批量

批量创建多条语句

把updata给insert 相当于执行多条sql语句 并发去执行了

formset ---form

modelformset ---modelform

view.py

from django.forms.models import modelformset_factory 
from django import forms
class StudyRecordDeial(View):
    class Meta:
        model = m.SSR
        fields = '__all__'
class SRDV(View)        :
    def get(s,r,c):
        f_s_o = modlformset_factory(model= models.SSR,form=SRDM)
        queryset = 
        c_r_o =     表指定了
        formset = form_set_obj(queryset= all_record)
            修改哪条指令,queryset指定
        
        

form extra = 1 额外多一个

默认把所有的字段都加了下拉框

insatance 拿原来的值摆在这里student

显示:
record ,  late
get_record_display 迟到

name = 'form-1-id'   背后也是默认干切分。。。
def post(s,r,c):
    forset = form_set_obj(req.POST)     #
    if formset.is_valid()
        formset.save()
    else:
        print(formset.errors)   都是必填的 
        modelform做的验证,fields = '__all__'    是所有的
        fields = ['sorce','homework_note']  
        

区分不同的app下的,用命名空间

不会有冲突

{% url 'app01:detail' pk=12 pp=99 %}

  views中的函数中使用 将app01写好

v = reverse('app01:detail', kwargs={'pk':11})

不写app_name = 'app01' 写了也得写 app01:detail

django 进阶

model进阶

QuerySet (类列表)
惰性查询
特点: 
可切片
可迭代
惰性查询(modelset不会查询,什么时候用才会查询)

​ return HttpResponse('ok')

class Book(m.M):

def test(request
    all_books = m.B.o.all()     #你不用,不查,效率低,否则
    print(all_books)    
    return HttpResponse('ok')

class Book(m.M):
    ....

​ log日志,不用不运行

缓存机制

每一个queryset 小的缓存,从缓存中先拿

for i in all_books:
    print(i.name)
for i in all_books:
    print(i.name)       只执行了一次queryset (缓存)
              清:垃圾回收机制

models.Book.objects.filter(pk=1).update(name='xxx')

all_obj = m.
for i in all_books:
    print(i.name)

models.Book.objects.filter(pk=1).update(name='xxx')
all_obj = m.
for i in all_books:
    print(i.name)       只执行了一次queryset (缓存)
              清:垃圾回收机制      

明天学啥:事件 日志没写?

标签:obj,get,class,day77,pk,data,id
来源: https://www.cnblogs.com/Doner/p/11058008.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有