9

フィールドが返されたときにフィールドのデフォルト値をオーバーライドできるかどうか疑問に思っています。私がモデルを持っていたとしましょう:

class ModelA(models.Model)
    name = models.CharField(max_length=30)

呼び出す方法はありますか

modela_instance.name 

name + "foo" のように変更された値を返すことができますが、foo を追加するコードはデフォルトでモデル自体の中で実行されるため、name を呼び出して追加された値を取得するだけで済みますか?

私が実際にやりたいことは、モデル内にメソッドを持つことです。

def get_name(self):
     return self.name + " foo"

または同様のもので、その get_name メソッドにフィールド「name」への呼び出しをオーバーライドさせたいだけです。

4

2 に答える 2

16

はい、プロパティを使用してこれを行うことができます

class ModelA(models.Model)
    _name = models.CharField(...)

    def set_name(self, val):
        self._name = "%s - foo" % val

    def get_name(self):
        return self._name

    name = property(get_name, set_name)
于 2012-04-30T11:46:48.947 に答える
1

なぜあなたはこれをしたいのですか?確かではありませんが、これは良い考えではないと思います。ただし、たとえば、unicodeメソッドを使用できます。

class ModelA(models.Model)
    name = models.CharField(max_length=30)

    def __unicode__(self):
        return "%s : foo" % self.name

呼び出すときは、次を使用します。

modela_instance

またはfooが動的でなければならない場合:

class ModelA(models.Model)
    name = models.CharField(max_length=30)

    def __unicode__(self):
        return "%s : %s" % (self.name, self.make_foo())

    def make_foo(self):
        return "foo"

または独自のメソッドを定義します。

class ModelA(models.Model)
    name = models.CharField(max_length=30)

    def alt_name(self):
        return "%s : foo" % self.name  
于 2012-04-30T11:48:11.157 に答える