如何在django中按用户显示文章?

时间:2015-05-27 19:12:51

标签: django views models

我有文章模型:

class Article(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    pub_date = models.DateTimeField(editable=False)
    modified = models.DateTimeField(editable=True)    
    whopost = models.ForeignKey(UserProfile)

我有userprofile模型:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    info1 = models.BooleanField(default=False)
    mobile = models.CharField(max_length=50,default="")

我尝试在用户和文章之间建立关系,因此我知道谁创建了一篇文章。它允许我通过登录用户显示文章。

所以,

我在文章视图中尝试了以下内容:

def articles(request):

    args = {}
    args.update(csrf(request))

    user_articles = Article.objects.filter(whopost_id=request.user.id)
    latest_articles = Article.objects.order_by('-pub_date')[:10]

    #display articles in order by date
    #args['articles'] = latest_articles

    #display articles in order by user
    args['articles'] = user_articles

    args['language'] = language
    args['session_language'] = session_language

    return render(request, 'articles.html', args)

我创建了三个用户:

用户A. 用户B. 用户C

在我的userprofile_userprofile用户中有以下

id | user_id
1  | 1
2  | 13
3  | 14

在我的auth_user用户中有以下

id 
1
13
14

所以,我得到的值是1,2,3而不是1,13,14。

我应该在代码中更改以获取值1,13,14而不是1,2,3?

此外,问题的第二部分是:

如何按日期按用户显示文章?

2 个答案:

答案 0 :(得分:2)

问题的第一部分:

要获取userprofile ID代替user ID,只需访问UserProfile的一对一关系,如下所示:

userprofile_id = request.user.userprofile.id

问题的第二部分:

要按日期订购特定用户的文章,您只需执行以下操作:

articles_by_date = Article.objects.filter(
    whopost__id=request.user.userprofile.id
).order_by('-pub_date')

答案 1 :(得分:1)

在查询集中使用values()命令。

user_articles = Article.objects.filter(whopost=request.user.userprofile.id).values('whopost').order_by('-pub_date')