gpt4 book ai didi

python - Callable not defined for django.db.models field default

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:53 33 4
gpt4 key购买 nike

我正在使用 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 - Callable not defined for django.db.models field default,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30908562/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com