在扩展Django的用户模型时,如何为property()传递lambda函数?

3 django django-users python-2.7

我一直在寻求扩展Django用户模型,虽然我有信心我可以使它工作,但我确实想要了解一行代码.

我一直在参考以下教程:http: //blog.tivix.com/2012/01/06/extending-user-model-in-django/

但我不能为我的生活理解下面的代码行如何工作:

User.profile = property(lambda u: u.get_profile() )
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,这会将User.profile的getter方法设置为匿名函数,该函数将用户作为参数并返回配置文件,但是,如果我引用myuser.profile,则实际传递的参数何时?

我希望我能正确地沟通自己.任何帮助理解这一点将不胜感激!

Ble*_*der 5

他们用这种方式写它可能更有意义

User.profile = property(lambda self: self.get_profile())
Run Code Online (Sandbox Code Playgroud)

或者更详细地说:

class UserProfile(models.Model):  
    user = models.OneToOneField(User)  

    @property
    def profile(self):
        return self.get_profile()

    def __str__(self):  
          return "%s's profile" % self.user
Run Code Online (Sandbox Code Playgroud)

Python对象的每个实例方法的第一个参数是该方法所属的类的实例.self只是一个惯例,所以u也一样.