【发布时间】:2018-01-05 21:12:27
【问题描述】:
在 Django 中,相对于这个模型实例的主键,有没有办法决定我想为模型字段的默认值使用什么样的值?
前任:
如果我有一个 Question 对象,其中有一个字段 question_title 我想要做的就是将此字段设置为:
question_title = models.CharField(max_length=100, default="title")
但我不只是说default="title",而是想说:
default="title"+self.pk
问题是,(至少我认为问题是什么)当类成员在运行时定义时,没有实例化,所以从Python解释器级别,没有办法知道self.pk的值是什么已。
如果是,我尝试实现 init() 函数,但仍然出现类型错误:
class Question(models.Model):
question_title = models.CharField(max_length=100, default="untitled")
question_text = models.CharField(max_length=200, default ="content")
def __init__(self):
self.question_title = models.CharField(max_length=100, default="title"+str(self.pk))
self.question_text = models.CharField(max_length=200, default ="content")
def __str__(self):
return self.question_title
错误信息是:
__init__() takes exactly 1 argument (4 given)
【问题讨论】:
-
发布完整的回溯
-
为什么不使用模型管理器而不是覆盖
__init__。不建议覆盖 init -
@ArpitSolanki 感谢您提到这一点,正如您所说,该文档似乎很有用docs.djangoproject.com/en/1.11/ref/models/instances
-
请更新
__init__方法以匹配超级方法签名def __init__(self, *args, **kwargs):。您可能还想考虑pre_save信号。 -
使用 post_save 信号
标签: python django django-models