我有一个模型,我想包含一个主题的名称和他们的首字母(他的数据是某种程度上匿名和跟踪的首字母)。
现在,我写了
class Subject(models.Model):
name = models.CharField("Name", max_length=30)
def subject_initials(self):
return ''.join(map(lambda x: '' if len(x)==0 else x[0],
self.name.split(' ')))
# Next line is what I want to do (or something equivalent), but doesn't work with
# NameError: name 'self' is not defined
subject_init = models.CharField("Subject Initials", max_length=5, default=self.subject_initials)
正如最后一行所指出的,我希望能够将首字母作为字段(独立于名称)实际存储在数据库中,但是这是使用基于名称字段的默认值进行初始化的。然而,我有问题,因为 django 模型似乎没有一个“自我”。
如果将该行更改为 subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
,则可以执行 syncdb,但不能创建新的主题。
在 Django 中,有一个可调用函数根据另一个字段的值为某个字段提供默认值,这可能吗?
(出于好奇,我之所以想把我的店名首字母单独分开,是因为在极少数情况下,奇怪的姓氏可能与我正在追踪的姓氏不同。例如,其他人决定将名为“ John O’Mallory”的实验对象1的首字母缩写改为“ JM”而不是“ JO”,并希望以管理员的身份对其进行编辑。)