正如标题所说,request.user和request.user.username之间有什么区别?我使用它们将它们与一些变量进行比较,有时它使用第一个,有时使用第二个
答案 0 :(得分:3)
request.user
是User
个实例,request.user.username
是该用户' s username
的字符串。
如果你有一个字符串,例如'admin'
,然后您希望将其与request.user.username
进行比较。
答案 1 :(得分:2)
我认为只有在{{user}}
和{{user.username}}
等模板中使用用户对象后才会出现问题,并了解模板呈现相同的内容。
关键在于,当您渲染模板时,django会自动将变量转换为其unicode表示(字符串),并且在视图函数中,它可以不是字符串,而是某个模型的实例。
来自app django.contrib.auth的用户类具有类似
的unicode表示def __unicode__(self):
return self.username
也许这就是你混淆user
和user.username
的原因。
这种误解可能很危险,因为当您输入类似
的内容时if user1 == user2.username:
你不会得到TypeError
,因为任何django模型都存在于models.Model有一个运算符
def __eq__(self, other):
return isinstance(other, self.__class__) and self._get_pk_val() == other._get_pk_val()
查找user1和user2.username是否具有相同的类。
无论如何,我认为练习一点后你会发现某些模特的弦乐和物体之间存在差异。