Я думаю, ты слишком много думаешь. По сути, вы хотите знать (насколько я могу судить - поправьте меня, если я ошибаюсь), на какие вопросы ответил пользователь, а на какие нет (дополнение). Итак:
user_answered_questions = set([answer.question for answer in user.answer_set.all()])
Тогда оставшиеся без ответа вопросы - это все остальное. Итак:
user_unanswered_questions = set(Question.objects.all()) - answered_questions
Смысл делать это таким образом, а не решением Узи, состоит в том, что вы должны использовать то, что знаете раньше, а не позже. Если вы фильтруете answer_set для каждого вопроса по пользователю, ваш начальный запрос будет выбирать каждый отдельный ответ и каждый вопрос в этих таблицах. Исходя из известных данных (то есть пользователя), мы выбираем только ответы и вопросы, связанные с этим пользователем.
EDIT:
Итак, если вы хотите объединить два набора в один список, существует множество способов, например, сделать это, создав список кортежей:
questions = [(q, q in user_answered_questions) for q in Question.objects.all()]
Затем вы можете перебирать вопросы, сохраняя порядок набора запросов:
for q in questions:
print "it is %s that this user answered the \"%s\" question" % (q[1], q[0])
Это не красиво, но вы понимаете, что вы уже определили, что вы хотели определить, это просто вопрос согласования с любой структурой данных, которая вам нужна.