3

我一直在考虑扩展 Django 用户模型,虽然我有信心让它工作,但有一行代码我真的很想理解。

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

但我一生都无法理解以下代码行的工作原理:

User.profile = property(lambda u: u.get_profile() )

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

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

4

1 回答 1

7

他们这样写可能更有意义

User.profile = property(lambda self: self.get_profile())

或者更详细地说:

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

Python 对象的每个实例方法的第一个参数是该方法所属类的实例。self只是一个约定,所以u也可以。

于 2013-06-30T23:42:33.517 回答