1

我有一个

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 Postscreated_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 definedp = Posts.objects.filter(created_by=testuser)

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

4

1 回答 1

1

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

poster 只是一个名称(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

于 2012-12-17T17:05:52.563 回答