0

我正在尝试创建一个 for 循环,用于在 Otree 中创建动态数量的对象,它扩展了 Django(我知道,疯狂的想法,但请耐心等待)。不幸的是,如果您尝试在代码中使用整数,最新版本的 otree 将引发编译时错误。例如,下面的代码:

num_decs = 8
for d in range(1, num_decs + 1):
locals()['dec_r'+str(r)+'_'+str(d)]= models.CharField(choices=[Constants.choice1_name, Constants.choice2_name],widget=widgets.RadioSelectHorizontal(),blank=False,initial='blank')

将抛出以下错误(与以前版本的 Otree 发生的警告相反):

(otree.E111) NonModelFieldAttr: Player has attribute "d", which is not a model field, and will therefore not be saved to the database.

我想解决这个问题的最佳方法是在 for 循环中将 d 声明为 IntegerField 对象,然后使用int () 方法将其转换为 int ,如下所示:

 num_decs = models.IntegerField(initial=8)
 d = models.IntegerField(default=0)
 for d in range(1, num_decs.__int__() + 1):

但是我收到一个错误,即 IntegerField 缺少int () 方法。我应该怎么做才能将 IntegerField 转换为 for 循环的 int?谢谢!

4

1 回答 1

1

对于那些外出使用 Otree 的人,我有一个解决方案!

将以下代码添加到 for 循环的末尾:

del d
del num_decs

你不应该有任何问题:)

于 2017-12-13T00:40:24.817 回答