django:选择未被问到的问题

时间:2010-03-11 20:34:53

标签: django models

我正在创建一个小的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))

现在,如果视图必须显示随机问题,而不是已经解决的列表......

是否有一个很好的方式来交叉问题和solveQuestions ....所以从未解决的列表中选择问题?

1 个答案:

答案 0 :(得分:1)

在Django中,ManyToMany关系自动对称... 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('?')

然后只使用返回的第一个。