This seems an oddly specific way to detect a QueryDict. Is the goal to log all the values when the task is saved, but only use the first item in the list when retrying?

If you don't need all the values when retrying, then the other values aren't important to when it ran the first time, and thus you shouldn't need to log them. Maybe it'd be cleaner to convert the QueryDict pre-serialization?

Even if you didn't decided to do that, IMO it'd be better to have a test for is_querydict and run this conversion on anything in the args that passes that test, rather than relying on the email field.