我正在尝试创建一个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转换?谢谢!
答案 0 :(得分:1)
对于那些外出和使用Otree的人,我有一个解决方案!
将以下代码添加到for循环的末尾:
{"url": "www.test.com", "text" : "Podcast 1... foo bar"}
你不应该有任何问题:)