【问题标题】:django: Selecting questions that was not askeddjango:选择未提出的问题
【发布时间】:2010-03-11 20:34:52
【问题描述】:

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

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

有没有一种很好的方法来交叉 Questions 和solvedQuestions....所以问题是从未解决的列表中选择的?

【问题讨论】:

    标签: django models


    【解决方案1】:

    ManyToMany 关系在 Django 中自动对称...http://docs.djangoproject.com/en/1.1/topics/db/models/#many-to-many-relationships

    从问题模型运行查询

    如果没有看到您的 Question 模型,我认为它最终会看起来像这样:

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

    相信该查询将为您提供与问题相关的用户与当前用户不匹配的所有结果。我对运行“非”查询不是很熟悉。快速查找告诉我,'~' 会做到这一点,但你应该仔细检查。

    然后,您可以从返回的查询集中随机获取一个。

    ** 编辑 **

    看起来您可以通过执行以下操作在查询中获取随机权:

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 2012-12-10
      • 2014-08-30
      • 2017-05-31
      • 2012-10-19
      • 2012-04-10
      • 2011-07-05
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多