2012-01-14 67 views
4

我試圖在我的django模型中保存大量字段。縱觀this question,其中有this答案:Django/Python更新字段值(在模型保存期間)

class Blog(models.Model): 
    name = models.CharField(max_length=100) 
    def save(self): 
     self.name = self.name.title() 
     super(Blog, self).save() 

這工作得很好,然而,在每個省,這需要一些額外的打字,如果我想這個多次重複。所以我想在保存步驟中創建一個將字段作爲輸入的函數,並將它們重新保存爲大寫字母。所以我寫了這個測試吧:

def save(self): 
    for field in [self.first_name, self.last_name]: 
     field = field.title() 
    super(Artist,self).save() 

但是,如果我以前想過這個問題,我就已經意識到,這僅僅覆蓋field變量。我想循環訪問一個變量列表來改變它們。我知道一些功能會改變這個值,而不使用=。他們如何做到這一點?我可以做到嗎?

還是有一些簡單的方法來做我在做什麼?我走錯了路?


SOLUTION: 從第一個答案,我做了以下功能:

def cap(self, *args): 
    for field in args: 
     value = getattr(self, field) 
     setattr(self, field, value.title()) 

,並在我的模型:

def save(self): 
    cap(self,'first_name', 'last_name') 
    super(Artist,self).save() 

回答

7

您可以使用SETATTR(個體經營,my_field_name,值)爲了達成這個。

for field in ['first_name', 'last_name']: 
    value = getattr(self, field) 
    setattr(self, field, value.title()) 

由於字符串在Python中是不可變的,因此您將無法就地修改該值。

+1

非常感謝,這正是我一直在尋找的! – 2012-01-14 19:35:24

+1

很高興爲您服務! – 2012-01-14 19:37:34