1、get_display:choice字段显示的是key,用get_display,会显示后面的值
2、bulk_create 批量生成,要么全部成功,要么全部失败,大批量处理数据,增加效率。
3、get_or_creat() 有就读取,没有就创建
在admin,写了个上课记录跟学习记录,用actions实现批量的修改。
class CourseRecordAdmin(admin.ModelAdmin):
'''上课记录'''
list_display = ['from_class','day_num','teacher','has_homework','homework_title','date']
list_filter = []
def initialize_studyrecord(self, request, queryset):
'''初始化学习记录'''
print('self,request,queryset',self, request, queryset)
if len(queryset)>1:
return HttpResponse('只能选择一个')
# enrollment关联着外键,_set反向查找拿到
new_obj_list=[]
for enrollment_obj in queryset[0].from_class.enrollment_set.all():
print(enrollment_obj)
# models.StudyRecord.objects.c(
# student=enrollment_obj,
# course_record=queryset[0],
# attendance=0,
# score=0,
# )
new_obj_list.append(models.StudyRecord(
student=enrollment_obj,
course_record=queryset[0],
attendance=0,
score=0,
))
#之前用get_or_create避免的重复修改的问题,但是使用bulk_create避免不了,只能接受错误
try:
models.StudyRecord.objects.bulk_create(new_obj_list)#具有事务性,批量创建
except Exception as e:
return HttpResponse('批量修改失败,有学生已经有对应的学习记录')
# ?course_record__id__exact =带上过滤的的值,跳转过去只显示指定的值
return redirect('/admin/app01/studyrecord/?course_record__id__exact=%s'%queryset[0].id)
initialize_studyrecord.short_description = "初始化所有学习记录"
actions=['initialize_studyrecord',]
class StudyRecordAdmin(admin.ModelAdmin):
list_display = ['student','course_record','attendance','score','date']
list_filter = ['course_record','date']
#字段可以在页面点击修改
list_editable = ['attendance','score']
```
2、复制到king_admin,把参数名对应的改一下,然后list_editable不能在king_admin直接使用
3、在django自带的user里加入 外键
```
stu_account = models.ForeignKey("Customer", verbose_name="关联学员账号", blank=True, null=True,
help_text="只有学员报名后方可为其创建账号",on_delete=models.CASCADE)
```
这样账号userfile就能绑定报了名的学员了
在前端展示学院信息