首页 > 解决方案 > Django:使用模型方法分配默认值(使用self)

问题描述

我正在寻找使用模型内部的方法分配默认值:

class Discussion(models.Model):
    # attributes ...

    def __str__(self):
            return str(self.id) + ". " + self.title

    def class_name(self):
        return self.__class__.__name__

    discussion_type = models.CharField(max_length = 50, default = self.class_name())

class TechDiscussion(Discussion):
    # ...

class ScienceDiscussion(Discussion):
    # ...

在我的 Django 应用程序中,用户只能创建科学或技术讨论。因此discussion_type应该是"TechDiscussion"or "ScienceDiscussion"

服务器返回错误NameError: name 'self' is not defined,指的是分配给的默认值discussion_type

标签: djangodjango-models

解决方案


正如 Bear Brown 在评论中建议的那样,解决方案是覆盖类的save()方法Discussion,也记录在此处。我删除了discussion_type分配并添加了覆盖,如文档中所示:

class Discussion(models.Model):
    # attributes ...

    def __str__(self):
            return str(self.id) + ". " + self.title

    def class_name(self):
        return self.__class__.__name__

    def save(self, *args, **kwargs):
            self.call_type = self.class_name()
            super().save(*args, **kwargs)

推荐阅读