gpt4 book ai didi

Django 模型 : Automatic value assignment to a field based on another field value

转载 作者:行者123 更新时间:2023-12-04 18:03:32 25 4
gpt4 key购买 nike

我正在学习 Django 教程。在投票应用程序管理页面中,我想根据投票问题的第一个字符创建一个 list_filter

为了解决这个问题,我考虑在问题模型中添加一个字段,它将问题文本的第一个字符作为值。但是,我希望自动设置该字段的值。我尝试了几种方法,但我无法理解一些事情:

教程中的代码:

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 是一个字符串?

  1. 我尝试覆盖 __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,正如错误告诉您的那样。我建议您阅读本教程并了解更多信息,但这里是您问题的答案。

覆盖 save() 方法,并在那里添加字段:

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 都将设置为问题文本的第一个字符。

关于Django 模型 : Automatic value assignment to a field based on another field value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com