2015-06-27 177 views
0

我正在通過Django教程開展工作。 在民意調查應用程序管理頁面中,我想根據民意調查問題的第一個字符創建一個list_filterDjango模型:基於另一個字段值爲字段自動賦值

爲了解決這個問題,我想在問題模型中添加一個字段,將問題文本的第一個字符作爲值。但是,我希望該字段的值自動設置。我試過幾種方法,但我不明白幾件事情:

從教程中的代碼:

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') 
  1. 我嘗試添加另一場類似這樣的:

    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

    +0

    感謝ZygD的編輯! –

    回答

    0

    我不認爲你應該添加到數據庫中的字段只是爲了好看過濾器的管理。

    無論如何,你的問題是你不是將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的第一個字符。

    +0

    謝謝!重寫save()的想法並沒有到我這裏來。這很有幫助! –

    相關問題