在我过滤模型对象后如何获得确切的模型字段?

时间:2014-10-08 18:58:17

标签: python django

很难描述我想做什么,但我会尝试。在我过滤了这样的模型之后(我最多只能得到一个对象):

tweets = Tweet.objects.filter(user__iexact=username) # username variable I got from URL

我想表明,哪位用户写了这条推文。所以我试图在我的模板中这样做:

<h1>{{tweets.username}}</h1>

但是,它没有显示任何内容。顺便说一下,这是我的模特:

class Tweet(models.Model):
    text = models.CharField(max_length=140)
    date = models.DateField(default=date.today)
    username = models.CharField(max_length=140)

3 个答案:

答案 0 :(得分:1)

如果您要查询唯一条目,请使用 .get

tweets = Tweet.objects.get(username__iexact=username)

而不是 .filter
filter()方法将返回一个数组,即使它只是一个结果。

而且,您的查询错误...您的模型上有用户名,而不是用户

(username__iexact=username)

https://docs.djangoproject.com/en/dev/topics/db/queries/

答案 1 :(得分:0)

您需要按照以下方式过滤推文:

tweets = Tweet.objects.filter(username__iexact=username)

如果您只想要一条推文:

tweet = Tweet.objects.get(username__iexact=username)

返回哪个推文实例取决于模型的默认顺序,id,除非您在模型的Meta选项中指定它。

在模板中,您需要循环播放返回的推文以显示仅存在于实例上的tweet.username,或者您需要传入用户名并显示:

<h1>{{ username }}</h1>

答案 2 :(得分:0)

上面描述的推文模型没有任何字段用户,因此过滤器user__iexact将不起作用。

假设用户名不是唯一的,因为模型没有将用户名字段描述为唯一

这可以改为: tweets = Tweet.objects.filter(username__iexact = username)

过滤器查询始终返回对象列表。 要访问第一个对象,请使用tweets [0]

显示用户名,我们可以使用推文[0] .username