Django получает данные из базы данных с помощью внешнего ключа
Я работаю над приложением для блога на django и хочу получить доступ ко всем полям базы данных через внешний ключ другой базы данных .
class User(AbstractUser):
about_user = models.TextField(("Profile"),blank = True)
def __str__(self):
return self.username
class Post(models.Model):
author = models.ForeignKey("account.User",on_delete=models.CASCADE)
status = models.BooleanField(("Status"),default = False)
Теперь я хочу получить доступ ко всем данным базы данных пользователя из сообщения, что-то вроде
posts = Post.objects.filter(status = True)
posts.author.about_author
или
user = User.objects.filter(username = post.author)
>
user.about_author
что я пытаюсь сделать здесь в моем шаблоне все содержимое поста будет отображаться и после этого я хочу, чтобы about_author (тот, кто написал пост). вроде того, как stackoverflow показывает каждый вопрос.
Заранее спасибо и любой совет будет очень признателен.
Вы получаете Postс помощью:
posts = Post.objects.filter(status=True)
но не имеет смысла писать:
posts.author
поскольку posts является QuerySet (поэтому коллекцией) Post, а не единицей.
Вы можете перечислить posts и затем показать .author для всех Post объектов:
for post in posts:
print(post.author.about_user)
или в шаблоне с:
{% for post in posts %}
{{ post.author.about_user }}
{% endfor %}
Вы можете повысить эффективность, извлекая все User в одном запросе с помощью:
posts = Post.objects.filter(status=True).select_related('author')