我使用的是 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)
关于python - 未为 django.db.models 字段默认定义可调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30908562/