2017-04-27 1 views
0

112 개의 필드가있는 방대한 등록 테이블이 있습니다. 특정 검색의 경우 1732 개의 필드를 비교하고 싶습니다. & 변수에 색상을 지정하면 'clrSelected'라고 말합니다. 내 코드는 다음과 같습니다 Django 1.4 - 사전에 저장된 필드를 사용하여 반복 쿼리

reg = Regisration.objects.filter('some condition').order_by("name") 
for r in reg: 
    if r.name=='abc': clrSelected='#fff' 
    if r.type=='1': clrSelected='#000' 
    if r.appl=='10': clrSelected='#c1ff51' 
    if r.code=='': clrSelected='#60c5f7' 
    if r.qlty=='first': clrSelected='#f99334' 
    ... 
    ... 

색깔해야 하나 경우 조건이있을 것이다. 즉, 비교할 필드 (사전의)는 사용자 선택에 따라 변경됩니다. 나는 내가 위와 같이 필드를 사용할 수있는 방법이

if r.flds['1']=='abc': clrSelected='#fff' 

같은 것을이

flds = {'1':'name', '2':'type', '3':'appl', '4':'code', '5':'qlty',...} 

같은 사전에서 필드 이름을 액세스하여 사용하려고합니다. 난 그냥 질문에 대답 장고 1.4 & 파이썬 2.7

+0

은 '변수 이름에서 필드에 동적으로 액세스하는 방법은 무엇입니까?' 목록이 아닌 필드 이름을 저장하기 위해 사전을 구조로 사용하는 이유가 있습니까? – ChidG

+0

yup..i 동적으로 사전에서 필드에 액세스하려고합니다. 액세스 할 필드는 사용자 선택에 따라 다릅니다. – user123

+1

답변에 따르면 getattr을 사용하여 동적으로 필드에 액세스합니다. 사전은 필요 없습니다. 여기에있는 목록은 똑같이 잘 작동합니다. – ChidG

답변

1

를 사용하고, 당신이 getattr을 사용할 수

if getattr(r, flds['1']) == 'abc': clrSelected = '#fff' 

을하지만, 난 당신이 구현의 다른 종류에 갈 수 있다고 확신 이 경우에는 dict을 사용하지 않아도됩니다.

I는 3 개 튜플 목록을 사용하는 것이 좋습니다 것

: (fieldName에, 값, 색상)

some_list = [('name', 'abc', '#fff'), ('type', '1', '#000'), ...] 

을 그리고, 다음 색상을 결정하기 위해이 목록을 사용

for fieldName, value, color in some_list: 
    if getattr(r, fieldName) == value: 
     clrSelected = color 

가 구현을 보면, 그것은 일치하는 마지막 if 조건에 따라 색상이 될 것 같습니다. 이 경우 some_list을 역순으로 생성하고 break을 첫 번째 일치 조건으로 생성 할 수 있습니다.

+0

thnk u..let getattr을 사용해보세요. 또한 내 코드에 단 하나의 ** if 조건 만있을 것입니다. 색상을 지정할 필요가있는 필드 (사용자 선택)를 기반으로 질문을 편집 할 것입니다. – user123

관련 문제