Пишу небольшой проект, требуется вывести список объектов, с фотографией, так как для одной записи требуются несколько фоток, то использую доп модель для вывода.
class realty(models.Model):
ROOMS_CHOICES = (
('1 ком','1 ком'),
('2 ком','2 ком'),
('3 ком','3 ком'),
('4 ком','4 ком'),
('Более','Более'),
)
WINDOW_CHOICES = (
('Пластиковые','Пластиковые'),
('Деревянные','Деревянные'),
('Алюминевые','Алюминевые'),
('Металопластиковые','Металопластиковые')
)
REPAIRS_CHOICES = (
('Капитальный','Капитальный'),
('Евроремонт','Евроремонт'),
('Космитический','Космитический'),
('Требует ремонта','Требует ремонта')
)
RAYON_CHOICES = (
('Железнодорожный','Железнодорожный'),
('Кировкий','Кировкий'),
('Ленинский','Ленинский'),
('Октябрьский','Октябрьский'),
('Свердловский','Свердловский'),
('Советский','Советский'),
('Центральный','Центральный')
)
photo = models.ForeignKey('photos', on_delete = models.CASCADE, editable = False, blank = False, null = True, default = None)#Фотки объекта
rooms = models.CharField(verbose_name = 'Количество комнат', max_length=200, blank=False, default=None, null=True, choices=ROOMS_CHOICES)#Количество комнат
etaj = models.DecimalField(verbose_name = 'Этаж', max_digits = 3, decimal_places=0)#Количество этажей
heigth = models.DecimalField(verbose_name = 'Высота потолков', max_digits = 5, decimal_places=2)#Высота потолка
window = models.CharField(verbose_name = 'Окна', max_length = 30, blank = True, default=None, choices=WINDOW_CHOICES)#Комнтаы
age = models.DateField(verbose_name = 'Год посторойки', auto_now = False, auto_now_add=False)#Год посторйки
price = models.DecimalField(verbose_name = 'Стоимость', max_digits = 8, decimal_places= 0)#Стоимость
price_metr = models.DecimalField(verbose_name = 'Стоимость за метр', max_digits = 8, decimal_places = 3)#Стоимость за метр
ploshad = models.DecimalField(verbose_name = 'Площадь', max_digits = 4, decimal_places = 1 )#Площадь квартиры
layout = models.CharField(verbose_name = 'Планировка', max_length = 200, blank = False, default = None, null= True)#Планировка
repairs = models.CharField(verbose_name = 'Ремонт', max_length = 100, blank = False, default = None, null = True, choices = REPAIRS_CHOICES)#Ремонт
territory = models.CharField(verbose_name = 'Описание территории', max_length = 250, blank = False,default = None, null = True)#Описание территории
text = models.TextField(verbose_name = 'Описание квартиры', )#Текстовое поле описание квартиры
rayon = models.CharField(verbose_name = 'Район', max_length=200, blank = False, default = None, null = True, choices = RAYON_CHOICES)#Район
adress = models.CharField(verbose_name = 'Адрес', max_length= 250, blank = True, default = None, null = True)#Адрес
realty_type = models.ForeignKey('type_realty',verbose_name = 'Тип недвижимости', on_delete = models.CASCADE)#Сслыка на таблицу с недвижимостью
def realty_save(self):
price_to_metr = self.price / self.ploshad
self.price_metr = price_to_metr
self.save()
def __str__(self):
return self.adress
def get_absolute_url(self):
return "/realty/%i/" % self.id
'''Модель с типами недвижимости'''
class photos(models.Model):
realtys = models.ForeignKey('realty', on_delete = models.CASCADE)
photo = models.ImageField(verbose_name = "Фотография", upload_to='realty_upload')
date = models.DateField(verbose_name = 'Дата загрузки', auto_now_add = True)
Views
from django.shortcuts import render
from property.models import realty, type_realty, photos
from django.views.generic import ListView, DetailView
# Create your views here.
class PostsListView(ListView):
model = realty
class PostDetailView(DetailView):
model = realty
Шаблон
{% extends 'base.html' %}
{% block content %}
<div class="container-fluid container-content">
<div class="row">
<div class="col-xl-6 col-lg-6 col-xs-12 col-12">
<div class="row">
{% for post in object_list %}
<div class="col-xl-6 col-lg-6 col-xs-12 col-12">
<div class="card card-my" style="width: 18rem;">
<img class="card-img-top" src="{{post.photo}}" alt="Card image cap">
<div class="card-body">
<h5 class="card-title card-title-my">{{post.adress}}</h5>
<p class="card-text"><p>Стоимость {{post.price}} <span class="rub">Р</span><br> Площадь: {{post.ploshad}}<br>
Район: {{post.rayon}}</p></p>
<a href="{{post.get_absolute_url}}" class="btn btn-success">Подробнее</a>
</div>
</div>
</div>
{% empty %}
<p>В данном разделе нет объектов</p>
{% endfor %}
</div>
</div>
<div class="col-xl-5 col-lg-5 col-xs-12 col-12">
Тут будет мапа
{{realty.photo}}
</div>
</div>
</div>
{% endblock %}