M
M
ma3xak2018-08-05 16:47:12
Django
ma3xak, 2018-08-05 16:47:12

How to display photos in the first view?

I am writing a small project, I need to display a list of objects, with a photo, since several photos are required for one entry, I use an additional model for output.

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

Sample
{% 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 %}

Answer the question

In order to leave comments, you need to log in

2 answer(s)
Ростислав Григорьев, 2018-08-05
@crazyzubr

Исходя из данной модели, так:

<img class="card-img-top" src="{{ post.photo.photo.url }}">

Ник В, 2018-08-06
@half-life


etaj
heigth
ploshad
rayon
Ты серьёзно?
Зачем я это увидел >_

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question