关于 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方法

0
3
慕设计6208342
回复
bobby
谢谢老师
2021-09-27
共3条回复

Django+ xadmin 开发在线教育网站

一套通用的技术组合拳,助你解决大部分Python类网站后端问题

1911 学习 · 2149 问题

查看课程