我正在使用 PyCharm 4.5.2、Django 1.8.2。
如果我将类定义为:
class User(models.Model):
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
slug = models.SlugField(max_length=256, unique=True, default=make_slug)
def make_slug(self):
return self.first_name + self.last_name[0]
IDE 突出显示 default=make_slug,其中 make_slug 未定义。解释器同意,当开发服务器尝试刷新时,它以状态 1 和错误 NameError: name 'make_slug' is not defined 退出。
因为它只是可调用对象的名称,所以我无法传递参数。因此,如果我在类外定义函数(移动到更高的范围并被定义),我就不能使用类属性。我已经阅读了一些使用 lambda 的建议,但是来自 Django documentation这是错误的:
Note that lambdas cannot be used for field options like default because they cannot be serialized by migrations. See that documentation for other caveats.
在模型中为默认值定义可调用对象的正确方法是什么。
请您参考如下方法:
你不应该使用这个方法来设置你的默认值,而不是覆盖模型的保存方法并在那里使用它。例如:
class User(models.Model):
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
slug = models.SlugField(max_length=256, unique=True, default=uuid.uuid1)
def make_slug(self):
return self.first_name + self.last_name[0]
def save(self, *args, **kwargs):
self.slug = self.make_slug()
super().save(*args, **kwargs)
