Django模型:基于另一个字段值为字段自动赋值
我正在通过Django教程开展工作。 在民意调查应用程序管理页面中,我想根据民意调查问题的第一个字符创建一个list_filter
。Django模型:基于另一个字段值为字段自动赋值
为了解决这个问题,我想在问题模型中添加一个字段,将问题文本的第一个字符作为值。但是,我希望该字段的值自动设置。我试过几种方法,但我不明白几件事情:
从教程中的代码:
class Question(models.Model):
def __str__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
-
我尝试添加另一场类似这样的:
first_char = question_text[:1]
我收到错误:
'CharField' object is not subscriptable
我想我不能在模型类中添加一个正常值。为什么我会得到这个错误,即使question_text
是一个字符串?
-
我试图重写
__init__
,但即使没有错误,数据库未填充:def __init__(self,*args,**kwargs): super(Question, self).__init__(*args, **kwargs) self.first_char = self.question_text[:1] first_char = models.CharField(max_length=1)
怎么能这个目标实现?
的Django:1.7
Ubuntu的:14.04
我不认为你应该添加到数据库中的字段只是为了好看过滤器的管理。
无论如何,你的问题是你不是将first_char赋值给对象的值,而是将charField赋值给CharField,而不是可以下载的,就像错误告诉你的一样。我会建议通过教程和学习,更多,但这里是你的问题的答案。
重写保存()方法,并添加有字段:
class Question(models.Model):
...
first_char = models.CharField(max_length=1)
def save(self):
# self.first_char for referencing to the current object
self.first_char = self.question_text[1]
super().save(self)
现在,每当对象被保存,first_char将被设置到QUESTION_TEXT的第一个字符。
谢谢!重写save()的想法并没有到我这里来。这很有帮助! –
感谢ZygD的编辑! –