请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于 courses = Course.objects.filter(course_org=self)

这个有几点疑问,self 就是 CourseOrg 本身,由于 CourseOrg 本身__str__方法返回了name字段,所以这里self就是name字段
然后 course_org 是Course表里的 course_org字段
但是由于获得的self是一个机构名称,它是怎么转成这个机构对应的ID的,我这里调出了sql语句看的时候条件是course_org_id = 2

SELECT id, add_time, tearcher_id, course_org_id, name, desc, learn_time, degree, students, fav_nums, click_nums, catagory, tag, youneed_know, teacher_tell, is_classics, detial, image FROM courses_course WHERE course_org_id = 2'

所以这里就不是很理解它是如何把这个机构名字转成ID的,是否能说明下这个机制是怎么样的

正在回答 回答被采纳积分+3

1回答

bobby 2021-09-13 16:15:35

你的理解有问题, 

    1.“self 就是 CourseOrg 本身”这句话没问题

    2.  由于 CourseOrg 本身__str__方法返回了name字段

这两句都没有问题, “所以这里self就是name字段”这句话就有问题了, __str__方法只有在特定的时候才会调用,这俩不是一回事,比如你print(CourseOrg )并不是因为CourseOrg 取了name了,而是因为 print函数内部调用了CourseOrg 的__str__方法了, 其实更进一步的说法应该是调用了str(CourseOrg )了,这个str方法会去调用CourseOrg 的__str__方法,所以是print->str->__str__所以你要清楚,这里的调用关系,所以这俩不是等价的,

 Course.objects.filter(course_org=self)

你这里只是参数传递并不代表就调用了str方法

0 回复 有任何疑惑可以回复我~
  • 提问者 慕设计6208342 #1
    好的,谢谢老师
    
    还有如下疑问
    
    1、那么self就是课程机构实例本身,那么如果我有3个课程机构的信息,便利这3条数据,这个self就相当每一个便利的机构对象,那么这个对象到底是什么,course_org=self时候,这个self到底是等于什么值,这部分能否帮忙解答以下
    
    2、另外就是这个course_set的方法
    
            def courses(self):
                courses = self.course_set.filter(is_classics=True)[:3]
                return courses
    因为当前表是 courses/Course 外键所以可以反向取到Course 数据
    那么这里我有个理解问题,self.course_set.filter中这个self就是当前CourseOrg,也就是授课机构的实例了,也就是说在course_set(course表中)寻找self(当前机构实例)所对应的课程,不知道我是否可以这么理解,那么为什么要这么写。
    回复 有任何疑惑可以回复我~ 2021-09-24 23:15:01
  • bobby 回复 提问者 慕设计6208342 #2
    1. self就是course_org对象,2. 理解正确,self.course_set 就是相当于 course_org.course_set用法,也就是说你只要从数据库中取出一个course_org就可以直接使用course_org.course_set, 至于为什么django要支持这种用法那就是用起来简单啊,你如果觉得这个用法不好用你也可以直接 Course.object.filter(courseorg=self)这两种都是获取同样的数据
    回复 有任何疑惑可以回复我~ 2021-09-27 10:01:56
  • 提问者 慕设计6208342 回复 bobby #3
    谢谢老师
    回复 有任何疑惑可以回复我~ 2021-09-27 21:39:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信