Django动态详细名称

时间:2017-12-13 01:05:12

标签: django django-views

我正在努力思考如何实现这一目标。我想要做的是在CharField对象中有一系列问题(代表一个Likert表),如下所示:

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 :(得分:0)

好的,这是我的回答(以及对我要找的内容的澄清)。基本上我有一系列的李克特问题要提交给参与者,我想代表CharFields。因为每个Likert问题使用相同的七个选择标度,所以看起来像重复相同功能的低效编码并且仅在每个声明之间更改详细名称。

因此,我使用这种方法来实现我想要的目标:

# 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