2012-01-14 3 views
4

장고 모델의 여러 필드를 저장할 때 대문자로 표시하려고합니다. 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()) 

문자열을 파이썬에서 사용할 수 없으므로 값을 수정할 수 없습니다.

+1

정말 고마워요. 이건 내가 찾고 있던 것입니다! –

+1

도움이되어서 기쁩니다! –