首页 > 解决方案 > 使用自身长度比较单词时没有错误

问题描述

我试图限制主题可以在表单字段中使用的最小字符数,使用Otree. 我希望如果受试者输入的名称长度少于 4 个字符,应用程序会向他们显示一个错误,说明他们必须写一个更长的单词。

我正在使用len,但出现以下错误:

'NoneType' has no len()

有人可以帮我找出代码中的问题并帮助我修复它吗?

这是我的 pages.py 代码。


class Consentimiento(Page):

    form_model = 'player'
    form_fields = ['consentimiento', 'consentimienton',]

    def consentimiento_error_message(self, value):
        print('El nombre es', value)
        if len(self.player.consentimiento)) < Constants.number:
            return 'Por favor en el campo de nombre debe poner mínimo 4 letras'
 

这是我的 models.py代码

consentimienton =  models.StringField( max_length=50 )

标签: pythonotree

解决方案


我注意到您的工作示例中有几个错误。

  • len(self.player.consentimiento)正在检查数据,而不是用户提供的输入。您应该将其替换为len(value). (还要注意额外的括号)

  • 您正在使用fieldname_error_message(self,value)功能。这应该被定义:

    • 对于字段,而不是页面。
    • models.py您的模型下,而不是在pages.py.

所以最后你应该有以下内容models.py

# Don't forget to define number field in Constants

class Player(BasePlayer):
    consentimienton =  models.StringField( max_length=50 )

    def consentimienton_error_message(self, value):
        print('El nombre es', value)
        if len(value) < Constants.number:
            return 'Por favor en el campo de nombre debe poner mínimo 4 letras'


这在你的pages.py

class Consentimiento(Page):
    form_model = 'player'
    form_fields = ['consentimienton']

推荐阅读