按内容为models的字段筛选模型.ForeignKey(User)

时间:2012-12-17 17:05:05

标签: django django-models django-views django-urls

我有一个

class Posts(models.Model):
    created_by = models.ForeignKey(User)
    post = models.CharField(max_length=150)
    active = models.NullBooleanField()
    def __unicode__(self):
        return self.post

现在我想按class Posts过滤我的created_by=testuser。为此我做

p = Posts.objects.filter(created_by=poster, active=True)

var(poster)来自请求的url(r'^(?P<poster>\w+)/$', views.Posts),

如果我通过访问my-domain.tld / testuser来执行它,我会得到ValueError: invalid literal for int() with base 10: 'testuser'

如果我尝试在manage.py shell中过滤,如果我尝试使用NameError: name 'testuser' is not defined命令进行过滤,则会收到错误p = Posts.objects.filter(created_by=testuser)

如何正确过滤我的字段created_by内容为models.ForeignKey(用户)。无论如何还是有解决方案,还是应该创建额外的CharField创作者(海报)作为内容?

1 个答案:

答案 0 :(得分:1)

p = Posts.objects.filter(created_by__username=poster, active=True)

海报只是一个名称(str),您可以使用__

跨越user.username的关系和查询

或者您可以先通过海报

获取用户对象
user = Users.objects.get(username=poster)
p = Posts.objects.filter(created_by=user, active=True)

用户模型文档可在网站上找到:https://docs.djangoproject.com/en/dev/topics/auth/#users