我在理解 self
的行为时遇到了一个非常基本的问题。
具体来说,我不明白为什么以下两段代码都不起作用,第一个导致解释器提示
self
is missing as an argument,
第二个
self
couldn't be referenced.
class Model(models.Model)
name = models.CharField(max_length=200)
auto_gen_field = models.CharField(max_length=200, default=gen_field())
def gen_field(self):
return self.name + 'something'
class Model(models.Model)
name = models.CharField(max_length=200)
auto_gen_field = models.CharField(max_length=200, default=gen_field(self))
def gen_field(self):
return self.name + 'something'
以下代码也使用了 self
,运行良好:
class Model(models.Model)
name = models.CHarField(max_length=200)
auto_gen_field = models.CharField(max_length=200, blank=True)
def gen_field(self):
return self.name + 'something'
def save(self):
self.auto_gen_field = self.gen_field()
super(Model, self).save(*args, **kwargs)
为什么 self
引用存在于一处而另一处不存在?
如何修复前两个片段?
最佳答案
您在声明字段时调用该方法。那时没有self
。
无论如何你都不想那样做。除了 self 的任何问题外,这样做会返回默认的静态值,因此所有实例都将使用相同的值。这就是为什么传递 callable 很重要:gen_field
- 而不是结果 - gen_field()
。
(但请注意,这仍然行不通:实例不会被传递给函数,因为它没有作为实例上的方法被调用。覆盖保存是要走的路。)
关于python - 为什么我不能将模型方法用作默认值?无论如何,Python/Django 模型中的 self 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32579938/