Как правильно вывести поля в 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'),