2012-01-14 14 views
4

私は、保存時に、私のdjangoモデルのいくつかのフィールドを大文字にすることを試みています。 this答えたthis question、を見て:私はこれを複数回繰り返したい場合は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変数を上書きすることに気づいただろう。私はそれらを変更するための変数のリストを巡回したいと思う。 =を使用せずに、一部の関数が値を変更することがわかっています。彼らはどのようにこれを行うのですか?私はそれを達成できますか?

または、私がやっていることをやるための簡単な方法がありますか?私は間違った方法を行っていますか?


解決 最初の答えから、私は機能を作った:

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でimmutablesがそうであるように、場所値を変更することはできません。

+1

ありがとう、これは私が探していたものです! –

+1

助けになるのはうれしい! –