Как вывести информацию из двух связанных моделей ForeignKey на Django
models.py
class Article(models.Model):
article_title = models.CharField('Название статьи ', max_length=200)
article_text = models.TextField('текст')
pub_date = models.DateTimeField('дата')
img_post = models.ImageField("Изображение", upload_to="img")
def __str__(self):
return self.article_title
class Meta:
verbose_name = 'Статья'
verbose_name_plural = 'Статьи'
class Image(models.Model):
Article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='images')
image = models.ImageField("Изображение", upload_to="img")
class Meta:
verbose_name = 'Изображение'
verbose_name_plural = 'Изображения'
home urls.py
from django.urls import path
from . import views
app_name = 'home'
urlpatterns = [
path('', views.index, name = 'index'),
path('<int:home_id>/', views.detail, name = 'detail'),
]
views.py
from django.shortcuts import render
from .models import Article, Image
from django.core.paginator import Paginator
def index(request):
latest_atricles_list = Article.objects.order_by('-pub_date')
paginator = Paginator(latest_atricles_list, 6)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number,)
return render(request, 'home/list.html', {'latest_atricles_list': latest_atricles_list,'page_obj': page_obj})
def detail(request, home_id):
a = Article.objects.get(id= home_id)
return render(request, 'home/detail.html', {'a': a,})
detail.html
{% extends 'base.html' %}
{% block title %}{{a.article_title}}{% endblock %}
{% block content %}
<h2>{{a.article_title}}</h2>
<p>{{a.article_text}}</p>
<em>{{a.pub_date}}</em>
<img src="/media/{{ a.img_post }}">
{% for %}
{# вот тут должны отображаться фото #}
{%endfor%}
{% endblock %}
Здравствуйте, я делаю сайт портфолио. На главной странице выводится карточки выполненных работ. Карточки состоят из обложки работы, даты, заголовка и кнопки "подробнее" (на этом этапе всё работает отлично). По нажатию кнопки, нас переносит в detail.html. Там выводится полная информация о карточке, так же остальные фотографии этой работы. Именно с этими фотографиями у меня возникли проблемы, никак не могу их вывести. Гуглил много раз, но ничего не работало.
Ответы (1 шт):
Надеюсь у вас настроены MEDIA_URL и MEDIA_ROOT?
Вам нужно вписать url картинки в тэг img:
<img src="{{ a.img_post.url }}">
Для вывода связанной модели с изображениями:
def detail(request, home_id):
a = Article.objects.get(id=home_id)
images = Image.objects.filter(Article=a)
return render(request, 'home/detail.html', {'a': a, 'images': images})
html:
{% for image in images %}
<img src="{{ image.url }}">
{% endfor %}
И переименуйте вашу переменную Article на article т.к. У вас переменная может конфликтовать с классом.
Так же, прочтите PEP8