Skip to main content
 首页 » 编程设计

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

2024年08月25日27thcjp

我正在使用 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)