#1
by
simoncolumbus
I am using the IncorrectResponse(ExtraModel) method to capture incorrect form responses: https://www.otreehub.com/forum/116/ Using this method, I can set an error message which will be presented underneath each incorrect form field. However, the method also display a generic 'Please fix the errors.' message at the top, which appears to be hardcoded into the Page.html template. Is there a way to modify this message, either globally or on a specific page?
#2
by
Chris_oTree
def error_message(player, values):
return "fix your mistakes"
if you need to return a dict (because you have separate error messages for each field), you can return a key called '__all__':
def error_message(player, values):
return dict(__all__="fix your mistakes", field1="wrong answer")
#3
by
simoncolumbus
Thanks Chris, this is very useful. However, that just changes the error message under the respective form field, but not the one on top of the page (unless I implemented it incorrectly). See the attached screenshot -- I would like to change the 'Please fix the errors.' message at the top.
Just in case it's relevant, code below.
class IncorrectResponse(ExtraModel):
player = models.Link(Player)
field_name = models.StringField()
response = models.StringField()
class Comprehension_Check(Page):
form_model = 'player'
form_fields = ['comprehensionb_1', #'comprehensionb_2',
'comprehensionb_2',
'comprehensionb_3',
'comprehensionb_4',
'comprehensionb_5']
@staticmethod
def error_message(player: Player, values):
solutions = dict(comprehensionb_1=1,
comprehensionb_2=2,
comprehensionb_3=1,
comprehensionb_4=2,
comprehensionb_5=1)
errors = {f: 'Wrong answer! Please try again' for f in solutions if values[f] != solutions[f]}
if errors:
for field_name in errors:
response = values[field_name]
IncorrectResponse.create(player=player, field_name=field_name, response=str(response))
return errors
#4
by
Chris_oTree
Never mind, the __all__ technique I mentioned is not currently implemented.
Instead, you can use CSS to hide the red banner, and then use {{ if form.errors }} ... {{ endif }} to display some custom content instead.