Как правильно вывести поля в html-шаблон из модели User в Django ORM?

Задача: Создайте SQL-запрос Django, вытаскивая только необходимые поля. Отправьте их в шаблон.

У меня есть модель Post с внешним ключом к стандартной модели User:

from django.db import models
from django.contrib.auth.models import User


class Post(models.Model):
    text = models.TextField()
    pub_date = models.DateTimeField("date published", auto_now_add=True)
    author = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name="posts"
    )

Вот необходимый фрагмент в шаблоне HTML, где нужно вставить имя автора:

{% for post in posts %}
<h3>
    Author: {{ post.author.first_name }}, Date: {{ post.pub_date|date:'d M Y' }}
</h3>

функция просмотра:

from django.shortcuts import render

from .models import Post


def index(request):
latest = (
    Post
    .objects
    .order_by('-pub_date')[:10]
    .select_related('author')
    .values('pub_date', 'author__first_name')
)
return render(request, 'index.html', {'posts': latest})

Вот как выглядит фрагмент страницы на локальном сервере: template. А вот окончательный sql-запрос, отображаемый панелью инструментов отладки django: Query

В таблице user у меня один пользователь и все посты относятся к нему. Если я не использую .values в представлении, то все атрибуты автора, которые я запрашиваю в шаблоне, прекрасно отображаются (например, last_name, username, get_full_name()), но тогда sql запрашивает все поля таблицы user (как он обычно делает), а я хочу получить только определенные, чтобы сэкономить память. Я также пытался пересоздать проект, использовать User = get_user_model(). Ничего не помогло.

Вы можете обратиться к этому:

Модель

from django.db import models

# Create your models here.
class CoachDetailsModel(models.Model):

     coach_id=models.AutoField(primary_key=True)
     name=models.CharField(max_length=100,help_text="Enter FullName")
     email=models.EmailField(max_length=100,help_text="Enter Email id")
     contact=models.BigIntegerField(help_text="Enter Mobile Number" ,null=True)
     password=models.CharField(max_length=100,help_text="Enter Password")
     coach_status=models.CharField(max_length=100,default='pending',help_text="Enter Password")

     def __str__(self):
         return self.email

     class Meta:
         db_table="Coach_details"

Виды

def coach_register(request):
  if request.method == "POST":
        name= request.POST.get('name')
        email = request.POST.get('email')
        contact = request.POST.get('contact')
        password = request.POST.get('password')

        CoachDetailsModel.objects.create(name=name,email=email,contact=contact,password=password)
  return render(request,'coach/coach-register.html')

  ### url
path('coach-register',coachviews.coach_register,name='coach_register'),

Html страница

Вернуться на верх