2017-12-13 12 views
0

私はこれを達成する方法について考えるのに苦労しています。私は何をしたいので、同様CharFieldですオブジェクトに(リッカートテーブルを表現するために)一連の質問を持っている。そして、Djangoの動的な詳細な名前

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 

そして私は、再び(質問番号に応じて、質問のための冗長な名前を変更します変数を格納するためにlocals()を使用するはずがないことを知ってください。しかし、ダイナミックラベルを達成する簡単な方法はありますか?ありがとう!

+1

したがって、私の代わりに私が欲しいものを達成するために、このメソッドを使用しました。モデルフィールドはデータベース列を表し、動的ではありません。そしてそれらは、ローカル変数ではなく、モデルクラスの属性として定義されます。あなたは何をしようとしているのですか? –

+0

こんにちはダニエル、私は自分の質問に対する答えを見つけたと思う。私がしたかったのは、質問に応じて異なるラベルを持つ異なるCharFieldを動的に宣言することでした。すべてのリッカートの質問票が7ポイントの尺度であることを考えると、すべての機能がほぼ同じであれば、それぞれの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 
関連する問題