请稍等 ...
×

采纳答案成功!

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

关于django models manager filter 的一些疑问?

图片描述
我想问一下关于django model filter 的时候如果username = self.request.user 的时候是可以返回成功的,老师课程里面也是这样写的,但是通过type可以看到这是个类对象,当filter 的时候传入类对象为什么可以返回成功呢?还有就是每次执行都print了两次这是什么原因呢?

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

1回答

bobby 2020-08-19 18:19:55

self.request.user  这是一个simplelazyobject对象,我们可以当做user对象对待 http://www.hongweipeng.com/index.php/archives/1787/ 你可以看看这个文章

0 回复 有任何疑惑可以回复我~
  • 提问者 Lchyang #1
    嗯嗯,我的意思是filter的时候username=obj,这个obj应该是self.request.user.username这个字段,但是为什么传入self.request.user的时候会自动匹配到username上,这个原理是和print时调用__str__的原理一样吗?不是很清楚
    回复 有任何疑惑可以回复我~ 2020-08-20 17:04:01
  • bobby 回复 提问者 Lchyang #2
    是的,你的这个尝试很不错, 你可以尝试一下将__str__返回的是另一个字段看看是否还是能自己通过username去查询
    回复 有任何疑惑可以回复我~ 2020-08-22 10:36:27
  • 提问者 Lchyang 回复 bobby #3
    看来是的,根据你的提示,我又断点了一下django源码,在django/db/models/fields/__init__.py 中发现了一个函数是处理这个操作的    
    def to_python(self, value):
            if isinstance(value, str) or value is None:
                return value
            return str(value)
    这解释了为什么传入一个类可以匹配到一个字段了,传入的是类的话django会默认str()一下
    回复 有任何疑惑可以回复我~ 2020-08-22 22:54:53
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号