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

并在调用时使用:

模型实例

或者当 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 回答