【发布时间】:2011-05-21 19:41:31
【问题描述】:
我有一个模型,我想包含一个主题名称和他们的首字母缩写(他的数据有些匿名并通过首字母缩写进行跟踪)。
现在,我写了
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 中是否可能,让一个可调用函数根据另一个字段的值为某个字段提供默认值?
(出于好奇,我想单独分开我的商店首字母的原因是在极少数情况下奇怪的姓氏可能与我正在跟踪的姓氏不同。例如,其他人决定主题 1 命名为“John O'Mallory " 首字母是 "JM" 而不是 "JO" 并且想修复以管理员身份编辑它。)
【问题讨论】:
标签: python django django-models