#1 by mitnec
Hello, My question is pretty much what it says on the tin. Respondents' incorrect guesses to a particular kind of question may be informative, and I'd like to capture them. Right now we can bounce them with e.g. {field_name}_error_message() if the answer is wrong, but in that case their response is not recorded. I can think of ways to do this with e.g. many identical fields (guess_1, guess_2) and javascript, but that seems like it's not the best way. I also suppose you could do this with live pages and ExtraModel. But I have the intuition there is a better way. Any ideas?
#2 by Chris_oTree
Here is an implementation that can store wrong answers for multiple different fields. I set 'response' to be a StringField so that it can flexibly store incorrect responses of any type (bool/string/number). class Player(BasePlayer): myfield = models.IntegerField() class IncorrectResponse(ExtraModel): player = models.Link(Player) field_name = models.StringField() response = models.StringField() def myfield_error_message(player, value): if value != 42: IncorrectResponse.create(player=player, field_name='myfield', response=str(value)) return "Wrong answer"
#3 by mitnec
Neat, thank you!
#4 by Chris_oTree
Here is a way to record incorrect answers for multiple fields at once: @staticmethod def error_message(player: Player, values): solutions = dict(quiz1=4, quiz2='Ottawa', quiz3=2019, quiz4=False) errors = {f: '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