【问题标题】:Filter models by a field that content is models.ForeignKey(User)按内容为 models.ForeignKey(User) 的字段过滤模型
【发布时间】:2012-12-04 19:29:20
【问题描述】:

我有一个

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

现在我想用created_by=testuser 过滤我的class Posts。为此我愿意

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,如果我尝试通过命令p = Posts.objects.filter(created_by=testuser) 过滤,则会收到错误NameError: name 'testuser' is not defined

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 谢谢!更快更好是不可能的;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2016-03-25
    • 2014-04-06
    • 2015-03-25
    • 2018-08-18
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多