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 に答える