Джанго: выбор вопросов, которые не задавались - PullRequest
1 голос
/ 11 марта 2010

Я создаю небольшое приложение django, которое содержит несколько вопросов (и ответов на них)

Что я хочу сделать, так это показать пользователю случайный вопрос, но только из тех, которые он еще не решил. Интересно, как это сделать.

На данный момент я определил модель профиля пользователя следующим образом:

class UserProfile(models.Model):
    rank = models.IntegerField(default = 1)
    solvedQ = models.ManyToManyField(Question)
    user = models.ForeignKey(User, unique=True)

Итак, решенные проблемы добавляются следующим образом:

if user.is_authenticated():
    profile = user.get_profile()
    profile.rank += 1
    profile.solvedQ.add(Question.objects.get(id=id))

Теперь, если в представлении должен отображаться случайный вопрос, но не из уже решенного списка ...

Есть ли хороший способ пересечения Вопросов и решенных вопросов .... поэтому вопрос выбран из нерешенного списка?

1 Ответ

1 голос
/ 11 марта 2010

Отношения ManyToMany автоматически симметричны в Django ... http://docs.djangoproject.com/en/1.1/topics/db/models/#many-to-many-relationships

Выполнить запрос из модели вопросов

Не видя вашу модель Quesion, я предполагаю, что в итоге она будет выглядеть примерно так:

possible_questions = Questions.objects.filter(~(UserProfile=profile))

Я полагаю, , что запрос даст вам все результаты, в которых Пользователь, связанный с Вопросом, не соответствует текущему пользователю. Я не очень знаком с выполнением запросов "не". Быстрый поиск сказал мне, что '~' сделает это, но вы должны перепроверить.

Затем вы можете просто получить случайный из возвращенного набора запросов.

** редактировать **

Похоже, вы можете получить случайное право в запросе, выполнив что-то вроде:

possible_questions = Questions.objects.filter(~(UserProfile=profile)).order_by('?')

Тогда просто используйте первый возвращенный.

...