当前位置: 首页 > 后端技术 > Python

杀手xadmin开发在线教育网站8-5_快速注册模型进入xadmin

时间:2023-03-26 14:58:19 Python

courses的注册表1.注册表importxadminfromapps.courses.modelsimportCourse,Lesson,Video,CourseResource#xadmin允许我们不继承任何东西classCourseAdmin(object):list_display=['name','desc','detail','degree','learn_times','students']search_fields=['name','desc','detail','degree','students']list_filter=['name','teacher__name','desc','细节','学位','learn_times','学生']list_editable=[“学位”,“desc”]classLessonAdmin(对象):list_display=['课程','名称','add_time']search_fields=['course','name']list_filter=['course__name','name','add_time']classVideoAdmin(object):list_display=['lesson','name','add_time']search_fields=['lesson','name']list_filter=['lesson','name','add_time']classCourseResourceAdmin(object):list_display=['course','name','file','add_time']search_fields=['course','name','file']list_filter=['course','name','file','add_time']xadmin.site.register(Course,CourseAdmin)xadmin.site.register(Lesson,LessonAdmin)xadmin.site.register(Video,VideoAdmin)xadmin.site.register(CourseResource,CourseResourceAdmin)2.modelsinsidestr从datetimeimportdatetimefromdjango.dbimport重写modelsfromapps.users.modelsimportBaseModelfromapps.organizations.modelsimportTeacher#1.设计表结构有几个要点#Entity1Entity2#Course#Chaptervideo课程资源(所以这个直接加到curriculum中)#2.实体的具体字段#3.每个字段的类型,是否是必修课Course(BaseModel):#add_time=models.DateTimeField(default=datetime.now,verbose_name='Addtime')#不要使用datetime.now(#)方法,如果使用,调用时已经设置好,但是我们希望在实例生成的时候填上#以后大部分应该用到这个add_time,所以我们使用d的继承机制jango模型继承这个实体#因为`BaseModel`会被其他层的模型引用,所以放在最底层的`user`层。然后在course中引入users.model的BaseModelteacher=models.ForeignKey(Teacher,on_delete=models.CASCADE,verbose_name='lecturer')name=models.CharField(verbose_name='coursename',max_length=50)desc=models.CharField(verbose_name='课程描述',max_length=300)#duration最好以最小单位保存,然后在显示的时候换算成小时或者分钟learn_times=models.IntegerField(default=0,verbose_name='学习时长(分钟)')degree=models.CharField(verbose_name="difficulty",choices=(("cj","beginner"),("zj","intermediate"),("gj","advanced")),max_length=2)学生=models.IntegerField(default=0,verbose_name='numberoflearners')fav_nums=models.IntegerField(default=0,verbose_name='numberoffavorites')click_nums=models.IntegerField(default=0,verbose_name="数量clicks")notice=models.CharField(verbose_name="课程公告",max_length=300,default="")category=models.CharField(default=u"后端开发",max_length=20,verbose_name="课程类别")tag=models.CharField(default="",verbose_name="CourseLabel",max_length=10)#推荐你需要知道的相关课程=models.CharField(default="",max_length=300,verbose_name="CourseNotes")teacher_tell=models.CharField(default="",max_length=300,verbose_name="老师告诉你")is_classics=models.BooleanField(default=False,verbose_name="是不是经典")detail=models.TextField(verbose_name="coursedetails",default="")image=models.ImageField(upload_to="courses/%Y/%m",verbose_name="coverimage",max_length=100)classMeta:verbose_name='课程Information'verbose_name_plural=verbose_namedef__str__(self):returnself.nameclassLesson(BaseModel):course=models.ForeignKey(Course,on_delete=models.CASCADE)#on_delete表示对应外键数据删除后,当前数据应该做什么name=models.CharField(max_length=100,verbose_name="Chaptername")learn_times=models.IntegerField(default=0,verbose_name="学习时间(分钟)")classMeta:verbose_name='课程章节'verbose_name_plural=verbose_namedef__str__(self):returnself.nameclassVideo(BaseModel):lesson=models.ForeignKey(Lesson,verbose_name='chapter',on_delete=models.CASCADE)#on_delete表示对应外键数据删除后,当前数据做什么name=models.CharField(max_length=100,verbose_name="视频名称")learn_times=models.IntegerField(default=0,verbose_name="学习时间(分钟)")url=models.CharField(max_length=200,verbose_name='访问地址')classMeta:verbose_name='video'verbose_name_plural=verbose_namedef__str__(self):returnself.nameclassCourseResource(BaseModel):course=models.ForeignKey(Course,on_delete=models.CASCADE,verbose_name="course")name=models.CharField(max_length=100,verbose_name="name")file=models.FileField(upload_to="course/resource/%Y/%m",verbose_name="下载地址",max_length=200)classMeta:verbose_name="CourseResources"verbose_name_plural=verbose_namedef__str__(self):returnself.nameOrganizationsregistration1.registrationimportxadminfromapps.organizations.modelsimportTeacher,CourseOrg,City#xadmin不允许我们继承任何类TeacherAdmin(object):list_display=['org','name','work_years','work_company']search_fields=['org','name','work_years','work_company']list_filter=['org','name','work_years','work_company']classCourseOrgAdmin(object):list_display=['name','desc','click_nums','fav_nums']search_fields=['name','desc','click_nums','fav_nums']list_filter=['name','desc','click_nums','fav_nums']classCityAdmin(object):list_display=['id','name','desc']search_fields=['name','desc']list_filter=['name','desc','add_time']list_editable=['name','desc']xadmin.site.register(Teacher,TeacherAdmin)xadmin.site.register(CourseOrg,CourseOrgAdmin)xadmin.site.register(City,CityAdmin)Operations的注册1.注册importxadminfromapps.operations.modelsimportUserAsk,CourseComments,UserCourse,UserFavorite,UserMessageclassUserAskAdmin(object):list_display=['name','mobile','course_name','add_time']search_fields=['name','mobile','course_name']list_filter=['name','mobile','course_name','add_time']classUserCourseAdmin(object):list_display=['user','course','add_time']search_fields=['user','课程']list_filter=['用户','课程','广告d_time']classUserMessageAdmin(object):list_display=['user','message','has_read','add_time']search_fields=['user','message','has_read']list_filter=['user','message','has_read','add_time']classCourseCommentsAdmin(object):list_display=['user','course','comments','add_time']search_fields=['user','course','comments']list_filter=['user','course','comments','add_time']classUserFavoriteAdmin(object):list_display=['user','fav_id','fav_type','add_time']search_fields=['user','fav_id','fav_type']list_filter=['user','fav_id','fav_type','add_time']xadmin.site.register(UserAsk,UserAskAdmin)xadmin.site.register(UserCourse,UserCourseAdmin)xadmin.site.register(UserMessage,UserMessageAdmin)xadmin.site.register(CourseComments,CourseCommentsAdmin)xadmin.site.register(UserFavorite,UserFavoriteAdmin)2.models里面str重写fromdjango.dbimportmodelsfromdjango.contrib.authimportget_user_modelfromapps.users.modelsimportBaseModelfromapps.courses.modelsimportCourse#直接从设置中获取用户,不需要导入我们自己的UserProfile(因为有时候我们需要用到django自带的用户管理)UserProfile=get_user_model()classUserAsk(BaseModel):name=models.CharField(max_length=20,verbose_name='name')mobile=models.CharField(max_length=11,verbose_name='手机')course_name=models.CharField(max_length=50,verbose_name='课程名称')classMeta:verbose_name='用户咨询'verbose_name_plural=verbose_namedef__str__(self):return'{name}_{course}({mobile})'.format(name=self.name,course=self.course_name,mobile=self.mobile)classCourseComments(BaseModel):user=models.ForeignKey(UserProfile,on_delete=models.CASCADE,verbose_name='user')course=models.ForeignKey(课程,on_delete=models.CASCADE,verbose_name='course')comments=models.CharField(max_length=200,verbose_name='commentcontent')classMeta:verbose_name='课程评论'verbose_name_plural=verbose_namedef__str__(self):returnself.commentsclassUserFavorite(BaseModel):user=models.ForeignKey(UserProfile,on_delete=models.CASCADE,verbose_name='user')#不要使用下面两种方法,因为系统会变大了,类型会变多,类也会变多,会导致外键过多,也会需要修改表结构。添加新类型需要添加新列#course=models.ForeignKey(Course,verbose_name='course')#teacher=models.ForeignKey(Teacher,verbose_name='lecturer')fav_id=models.IntegerField(verbose_name='dataid')fav_tag=models.IntegerField(choices=(('1','course'),('2','课程机构'),('3','讲师')),default=1,verbose_name='最喜欢的类型')classMeta:verbose_name='UserFavorite'verbose_name_plural=verbose_namedef__str__(self):return'{user}_{id}'.format(user=self.user.username,id=self.fav_id)classUserMessage(BaseModel):user=models.ForeignKey(UserProfile,on_delete=models.CASCADE,verbose_name='user')message=models.CharField(max_length=200,verbose_name='content')has_read=models.BooleanField(默认=假,动词se_name='readornot')classMeta:verbose_name='usermessage'verbose_name_plural=verbose_namedef__str__(self):returnself.messageclassUserCourse(BaseModel):#有两个外键user和courseuser=models.ForeignKey(UserProfile,on_delete=models.CASCADE,verbose_name='User')course=models.ForeignKey(Course,on_delete=models.CASCADE,verbose_name='course')类元:verbose_name='UserCourse'verbose_name_plural=verbose_namedef__str__(self):返回self.course.name成功