关于 courses = Course.objects.filter(course_org=self)
来源:10-5 课程机构经典课程展示- 通过model反向去外键关联数据
慕设计6208342
2021-09-11
这个有几点疑问,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的,是否能说明下这个机制是怎么样的
写回答
1回答
-
bobby
2021-09-13
你的理解有问题,
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方法
032021-09-27