如何在Django中创建查找?

时间:2008-12-23 05:18:08

标签: python django lookup

我有一个问题模型&表单,此模型中的一个字段是 userid = ForeignKey(User),这在问题模型上运行得非常好,能够从下拉列表中选择用户。

但是当我想从模型中列出问题时,这是一种棘手的问题,这是从查找来自Users表的用户名的最佳方法吗?因为在这一点上我不能下拉!

我想要一个简单的事情,例如。

问题标题 问:查找用户名

2 个答案:

答案 0 :(得分:5)

您的字段名称(userid而不是user)让我觉得您可能会对Django ForeignKey的行为感到困惑。

如果您定义这样的模型:

from django.contrib.auth.models import User
from django.db import models

class Question(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=100)
    ...

    def __unicode__(self):
        return self.title

然后将Question实例化为question

>>> question.user # the `User` instance
<User: username>

>>> question.user_id # the user's primary key
1

看起来您可能希望question.userid成为用户的主键,而不是实际的主键:User实例本身。当您访问question.userid时,会执行数据库查找,但Django会使用question.userid_id的值自动完成。我会将userid字段重命名为user以避免混淆。

有了这个,我认为你要做的是列出问题及其相关用户。如果是这种情况,请在模板中执行以下操作:

<ol>
{% for question in questions %}
    <li>{{ question }} asked by: {{ question.user }}</li>
{% endfor %}
</ol>

答案 1 :(得分:0)

我发现你的问题模糊不清。如果您要获取与给定Question的特定User实例相关的所有user_name个实例,则可以这样做:

questions = Question.objects.filter( userid__username='user_name' )

如果您已经有一个User实例(例如,在一个名为user的变量中保存),并希望获取与其相关的所有Question个对象,那么您可以使用:

questions = user.question_set.all()