Django和外键的反向关系

Cla*_*ash 10 django django-models

假设以下简单模型:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

class Entry(models.Model):
    blog = models.ForeignKey(Blog)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    author = models.ForeignKey(User, related_name='author_set')
Run Code Online (Sandbox Code Playgroud)

如何让所有参与特定博客的作者(即pk = 1)?我尝试过这样的东西,但它没有用.

User.objects.author_set.filter(blog=Blog.objects.get(pk=1))
Run Code Online (Sandbox Code Playgroud)

提前谢谢了!

Chr*_*att 11

User.objects.filter(author_set__blog__pk=1)
Run Code Online (Sandbox Code Playgroud)

我没注意你的相关名字,所以上面的代码(修订版)现在使用了正确的相关名称.但是,这是一个非常糟糕的相关名称.相关名称应描述对方的内容,即Entry.真的应该如此related_name='entry_set'.但是,这related_name仍然是默认值,因此如果您只是想要,可以删除.我通常会使用相关类的简单复数版本,在这种情况下related_name='entries'.或者,您可能希望使用类似"blog_entries"的内容来更具体.

  • 不会.那将返回'用户'作为'Entry`的作者,pk = 1.但是,我刚从你的评论中意识到我的代码不太正确.见更新. (4认同)