program tip

점 구문 대신 문자열을 사용하여 Django 모델의 필드에 액세스 하시겠습니까?

radiobox 2020. 11. 11. 19:40
반응형

점 구문 대신 문자열을 사용하여 Django 모델의 필드에 액세스 하시겠습니까?


Django에서는 다음과 같이 할 수 있습니다.

test = Test.objects.get(id=1)
test.name

다음과 같이 동적으로 생성 된 문자열을 사용하여 속성에 액세스 할 수 있기를 원합니다.

test['name']

또는 문자열을 사용하는 다른 구문. 나는 시도했다

test._meta.get_field_by_name('name')

그러나 이것은 값이 아닌 필드 자체를 반환합니다.

어떤 아이디어?


파이썬의 내장 getattr()함수를 사용할 수 있습니다 .

getattr(test, 'name')

이름 이 인스턴스 테스트 의 속성 이라고 가정하면 getattr(test, 'name')해당 값을 반환해야합니다. 또는 test.__dict__['name'].

getattr()여기에서 더 많은 것을 읽을 수 있습니다 : http://effbot.org/zone/python-getattr.htm


다른 답변은 여전히 ​​유효하지만 이제 Django의 _meta.get_field ()를 사용하여이를 수행 할 수 있습니다.

test._meta.get_field('name')

Model _meta API는 1.8 부터 공식 지원 및 문서화시작 했지만 공식 문서화 이전에 이전 버전에서 배포 및 사용되었습니다.


Python에서는 일반적으로 dict 메서드 가있는 객체 내의 값에 액세스 할 수 있습니다 .

이 수업이 있다고 가정 해 보겠습니다.

class Dog(object):
    def __init___(self, color):
        self.color = color

그런 다음 인스턴스화합니다.

dog = Dog('brown')

따라서 다음을 수행하여 색상을 볼 수 있습니다.

print dog.color

다음을 수행하여 색상을 볼 수도 있습니다.

print dog.__dict__['color']

색상을 설정할 수 있습니다.

print dog.__dict__['color'] = 'green'

print dog.color

>>>green

참고 URL : https://stackoverflow.com/questions/9379249/access-django-models-fields-using-a-string-instead-of-dot-syntax

반응형