Max*_*fer 1 python django model class self
在了解的行为方面,我有一个非常基本的问题self。
具体来说,我不明白以下两个代码段为何都不起作用,第一个导致解释器抱怨:
self作为论据而缺失,
第二个
self无法引用。
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'
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)
以下代码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)
Run Code Online (Sandbox Code Playgroud)
为什么self引用存在于一个地方而不是另一个地方?
如何修复前两个片段?
您在声明该字段时调用该方法。那时还没有self。
您还是不想这样做。除了self的任何问题外,这样做会为默认值返回一个静态值,因此所有实例将使用相同的值。这就是为什么传递可调用对象很重要:gen_field-而不是结果-的原因gen_field()。
(但是请注意,这仍然行不通:不会将实例传递给函数,因为不会将其作为实例上的方法调用。覆盖保存是一种方法。)
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |