Как получить данные из другой модели в DetailView
 Я пытаюсь получить объекты из двух моделей, используя DetailView. Сначала я установил urls.py:
from django.urls import path
from . views import RetiroListView, RetiroDetailView
from . import views
urlpatterns = [
    path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
    path('post/', views.post, name='post-post'),
]
Вот мои модели:
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.
class Post(models.Model):
    
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
class Comment(models.Model):
    post = models.OneToOneField(Post, on_delete=models.CASCADE, primary_key=True)
    comment=models.CharField(max_length=100)
class Tags(models.Model):
    post = models.OneToOneField(Post, on_delete=models.CASCADE, primary_key=True)
    comment=models.CharField(max_length=100)
и детальный вид:
class PostDetailView(DetailView):
    model = Post
Теперь в моем шаблоне я могу использовать:
{{ object.title }}
Для доступа к информации о моих сообщениях, но мне нужно получить некоторую информацию из других таблиц в этом представлении. Я знаю, что должен переписать метод get_context_data, но не знаю как.
#1 set queryset variable
class PostDetailView(DetailView):
  # model = Post
  queryset = {custom queryset}
#2 переопределить метод get_queryset
class PostDetailView(DetailView):
  # model = Post
  def get_queryset(self, **kwargs):
    return {custom queryset}
Вы можете получить доступ к данным связанных объектов в шаблоне без get_context_data. Например, {{ object.comment.comment }} отобразит текст комментария для объекта модели Post. Обратите внимание, что object.comment относится к объекту модели Comment.
 Но если я правильно понял идею, я бы посоветовал обратить внимание на ForeignKey, а не на OneToOneField. Вот хороший обзор - OneToOneField() vs ForeignKey() в Django.
да, для комментариев это переменная comment, а для тегов это тоже переменная comment
Я не совсем понял это, поэтому я интерпретировал это как приведение комментариев и тегов, связанных с Post.
Это может быть реализовано через набор запросов без необходимости использовать метод get_context_data, предложенный автором вопроса.
views.py
from django.views.generic import DetailView
from .models import Post
# Create your views here.
from django.views.generic import DetailView
from .models import Post
# Create your views here.
class PostDetailView(DetailView):
  template_name = "posts/post-detail.html"
  context_object_name = "post"
  model = Post
Как показано выше, PostDetailView отображает шаблон post-detail.html, а к объекту Post, полученному из этого шаблона, можно обратиться со значением «post», которое является именем контекстного_объекта.
post-detail.html
<html>
  <head>
    <title>{{ post.title }}</title>
  </head>
  <body>
    <h1>{{ post.title }}</h1>
    <div>{{ post.content }}</div>
    <div>{{ post.comment.comment }}</div>
    <div>{{ post.tags.comment }}</div>
  </body>
</html>
Именно поэтому вы можете получить доступ к одному посту, доставленному PostDetailView, когда используете post в качестве переменной шаблона в шаблоне post-detail.
А объекты комментариев и тегов, связанные с постом, также могут быть доступны непосредственно из объекта поста.
- post.conmment.(comment field)
- post.tags.(tags field)
Такой подход возможен благодаря тому, что вы подключились к OneToOneField. Пожалуйста, обратитесь к этому документу для получения дополнительной информации!
И у меня есть один вопрос.
Если вы подключите комментарии и теги к OneToOneField, у вас будет один комментарий, тег на пост. Это ожидаемая часть?