2017-12-13 7 views
0

나는 이것을 성취하는 방법에 대해 고심하고 있습니다. 나는장고 동적 상세 이름

for a in range(1, 11): 
    locals()['ATL' + str(a)] = models.PositiveIntegerField(
     choices=[ 
      [1, 'Disagree Completely'], 
      [2, 'Disagree Strongly'], 
      [3, 'Disagree'], 
      [4, 'Neutral'], 
      [5, 'Agree'], 
      [5, 'Agree Strongly'], 
      [7, 'Agree Completely'], 
     ], 
     widget=widgets.RadioSelectHorizontal(), 
     verbose_name = Constants.ATL_qu_list[a-1]) 
del a 

그리고 다시 질문 번호 (에 따라 질문에 대한 자세한 이름을 변경 : 내가 뭘 원하는 그래서 같은 CharField 객체의 질문 (리 커트 테이블을 나타내는)의 시리즈를 가지고있다 변수를 저장하기 위해 locals()를 사용하지 않아야한다는 것을 알고 있습니다. 그래도 동적 인 레이블을 얻는 쉬운 방법이 있습니까? 감사!

+1

:

따라서, 내가 대신 내가 원하는 것을 달성하기 위해이 방법을 사용했습니다. 모델 필드는 데이터베이스 열을 나타내며 동적 일 수 없습니다. 그리고 그들은 지역 변수가 아니라 모델 클래스의 속성으로 정의됩니다. 너 뭐하려고? –

+0

Daniel 안녕하세요. 제 질문에 대한 답변을 찾은 것 같습니다. 내가하고 싶었던 것은 동적으로 다른 CharField를 다른 레이블로 선언하는 것입니다. 모든 Likert 설문지에 7 점 척도가 주어진다면 모든 CharField가 기능적으로 거의 같을 때 각 CharField를 따로 선언하는 것이 좋지 않은 코딩이라고 생각했습니다. 그래서 제가하고 싶었던 것은 리 커트 CharField를 한 번만 선언해야만하는 시스템을 개발 한 다음 묻는 질문에 따라 각각 다른 레이블을 적용하는 것입니다. 나는 아래에서 더 자세히 설명 할 것이다. – Krabo

답변

0

좋아요, 여기 내 대답 (뿐만 아니라 내가 찾고있는 내용에 대한 설명)입니다. 기본적으로 필자는 CharFields로 표현하고 싶은 참가자에게 Likert 질문 시리즈를 제공했습니다. 리 커트 질문마다 똑같은 7 가지 선택 척도가 사용되기 때문에 동일한 기능을 반복하고 각 선언 사이에 자세한 이름 만 변경하면 비효율적 인 코딩처럼 보입니다. 당신이 여기에 무엇을 달성하고자하는 분명하지 않다

# Reads in the list of survey questions 
with open('survey/survey_questions.csv') as csvfile: 
data_read = list(csv.reader(csvfile)) 
... 
for a in range(1, 11): 
    locals()['ATL' + str(a)] = models.PositiveIntegerField(
     choices=[ 
      [1, 'Disagree Completely'], 
      [2, 'Disagree Strongly'], 
      [3, 'Disagree'], 
      [4, 'Neutral'], 
      [5, 'Agree'], 
      [6, 'Agree Strongly'], 
      [7, 'Agree Completely'], 
     ], 
     widget=widgets.RadioSelectHorizontal(), 
     verbose_name = data_read[a-1][0]) 
del a