Практикой пытаюсь закрепить чтение документации.
Есть вьюха:
def alboms(request,cat_id):
show_albums = Album.objects.all().filter(cat=cat_id)
rando = Photo.objects.all().order_by('?')[: 1]
categir = Categories.objects.all()
context = {'albom': show_albums,'categor': categir,'thumb':rando}
return render(request,'adst/albums.html',context)
Получаю рандомную фотку из таблицы с фото.
rando = Photo.objects.all().order_by('?')[: 1]
Надо добавить параметр where чтобы рандомная фотка получалась только из одного альбома а не с цело базы.
п.с Код моделей , вьюх , и темплейтов прилогаеться.
пп.сс В модели альбома есть поле с IntegerField куда я думал добавлять ид фотки для превью. Но что то както не срослось.
Моделиfrom django.db import models
from django_attach.models import Attachment
from django.contrib.contenttypes.generic import GenericRelation
from django import forms
# Create your models here.
class Categories(models.Model):
id_cat = models.AutoField(primary_key=True)
Name_cat = models.CharField(max_length=15)
def __unicode__(self):
return self.Name_cat
class Album(models.Model):
cat = models.ForeignKey(Categories)
id_alb = models.AutoField(primary_key=True)
Name_album = models.CharField(max_length=100)
Text_f_album = models.CharField(max_length=200)
Title_page = models.CharField(max_length=70)
Title_photo = models.CharField(max_length=60)
Alt_photo = models.CharField(max_length=80)
id_photo_for_thumb = models.IntegerField()
desctiption = models.CharField(max_length=1100)
def __unicode__(self):
return '%s %s %s' % (self.Name_album, self.cat,self.id_photo_for_thumb)
class Photo(models.Model):
alb = models.ForeignKey(Album)
Title_f_photo = models.CharField(max_length=80)
Alt_f_photo = models.CharField(max_length=80)
image = models.ImageField(upload_to='media',default='_5q16cjpxm.jpg')
def __unicode__(self):
return self.Title_f_photo
Вьюхиfrom django.shortcuts import render
from django.http import HttpResponse
from django.db import models
from adst.models import Album
from adst.models import Categories
from adst.models import Photo
# Create your views here.
def index(request):
categir = Categories.objects.all()
context = {'categor': categir}
return render(request,'adst/base.html',context)
def gallary(request,alb_id):
get_photos = Photo.objects.all().filter(alb=alb_id)
categir = Categories.objects.all()
show_albums = Album.objects.all().filter(id_alb=alb_id)
context = {'phot':get_photos,'categor': categir,'alb_opis':show_albums}
return render(request,'adst/galar.html',context)
def alboms(request,cat_id):
show_albums = Album.objects.all().filter(cat=cat_id)
rando = Photo.objects.all().order_by('?')[: 1]
categir = Categories.objects.all()
context = {'albom': show_albums,'categor': categir,'thumb':rando}
return render(request,'adst/albums.html',context)
Темплейт для отображения альбомов{% extends "adst/base.html" %}
{% load static %}
{% block meta_title %}{{ categor.Name_cat }}{% endblock meta_title %}
{% block content %}
<!-- Контент -->
{% for albo in albom %}
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
<div class="thumbnail with-caption">
<a href="{% url "Watch" albo.id_alb %}"> {% for ran in thumb %}<img src="{{ ran.image.url }}" alt="My image"/> {% endfor%}</a>
<center>
{{ albo.Text_f_album }} {{rand.image.url }}
</center>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock content %}
URLSfrom django.conf.urls import patterns, include, url
from django.contrib import admin
from django.contrib.staticfiles import *
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
# Examples:
url(r'^$', 'adst.views.index', name='home'),
# url(r'^blast/', 'adst.views.testes', name='blast'),
url(r'^watch/(?P<alb_id>\d+)$', 'adst.views.gallary', name='Watch'),
# url(r'^albums/', 'adst.views.tisc', name='Alb'),
url(r'^category/(?P<cat_id>\d+)$', 'adst.views.alboms', name='Albom'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)