Django и обратные отношения от внешних ключей

предположим следующие простые модели:

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')

Как я могу получить всех авторов, участвовавших в определенном блоге (т.е. pk = 1)? Я пробовал что-то вроде этого, но это не сработало.

User.objects.author_set.filter(blog=Blog.objects.get(pk=1))

Большое спасибо заранее!

Ответ 1

User.objects.filter(author_set__blog__pk=1)

Я не обращал внимания на ваше родственное имя, поэтому в коде выше (пересмотренном) теперь используется соответствующее связанное имя. Однако это очень плохое родственное имя. Соответствующее имя должно описывать, что находится на противоположной стороне, то есть Entry. Так что это должно быть related_name='entry_set'. Тем не менее, это по умолчанию в любом случае, поэтому вы можете удалить related_name, если вы этого хотите. Обычно я использовал бы простую плюрализованную версию связанного класса, которая была бы в этом случае related_name='entries'. Или, возможно, вы захотите использовать что-то вроде "blog_entries", чтобы быть более конкретным.