Найти - Пользователи
Полная версия: Выборка данных Foreignkey
Начало » Django » Выборка данных Foreignkey
1
OZION
Имеются две таблицы Portfolio и Portfolio_Image:
class Portfolio(models.Model):
active = models.BooleanField(u'Активировать', default=False)
title = models.CharField(u'Title', max_length=80, blank=True, null=True)
url = models.CharField(u'URL', max_length=30)
name = models.CharField(u'Название', max_length=80)
fin_date = models.DateField(u'Дата окончания работ')
term = models.CharField(u'Срок работы', max_length=30)
cost_num = models.PositiveSmallIntegerField(u'Стоимость (число)')
cost_char = models.CharField(u'Стоимость (пропись)', max_length=40)
vinyl = models.CharField(u'Пленки', max_length=30, blank=True, null=True )
short_description = models.TextField(u'Описание', max_length=50, blank=True, null=True)
description = models.TextField(u'Описание')
def __unicode__(self):
return self.name

class PortfolioImage(models.Model):
portfolio = models.ForeignKey('Portfolio', related_name='images')
alt = models.CharField(u'описание', max_length=30, blank=True, null=True)
image = ImageWithThumbsField(upload_to="images/car/%s" % today, blank=True, null=True, sizes=((110, 110), (150, 150), (200, 150), (265, 200)))
position = models.PositiveSmallIntegerField(u'Позиция')

class Meta:
ordering = ['position']

def __unicode__(self):
return '%s %s' % (self.alt, self.image)
Требуется вывести в шаблон записи из таблицы Portfolio с условием что active=True.
Тут проблем нету:
portfolio_list = Portfolio.objects.filter(active=True)
Но теперь к каждой записи надо вставить картинку из таблицы Portfolio_Image в которой строка position = ‘1’

! но есть еще условие, если отсутствует запись из таблицы Portfolio_Image которая: связанна внешним ключом с записью из Portfolio, а так же строка position которой равно 1, то в этом случае запись будет передана в шаблон без картинки.


как это сделать не могу понять

Для наглядности http://vinil4you.ru/portfolio/ слева должны идти картинки filter(position='1') связанные с описанием справа, если картинки нету то просто выведется описание.

П.С. Два дня читаю доки но понимание того как это делается ко мне никак не придет, прошу вашей помощи.
Norecces
если не питонячим способом
то можно делать див с картинкой в стиле <div><img="store_url/~/pics/{{id}}.jpeg></div>
где айдишник из портфолио точно указывает картинку.
но тогда по сути вторая модель не нужна.
OZION
Norecces
Для так можно сделать для данной страницы, на ней используется одна картинка, но есть страницы где много картинок как эта http://vinil4you.ru/portfolio/toyota-land-cruiser-150510/ для которой вторая модель уже необходима.
+ стоит цель - научится.
Александр Кошелев
OZION
П.С. Два дня читаю доки но понимание того как это делается ко мне никак не придет, прошу вашей помощи.
Тогда третий день – http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships
OZION
Такой монстр у меня работать не захотел
Очень детальное описание проблемы.
OZION
Прошу прощения не точно сформулировал требования.
Не много изменил требования в первом посте.

Daevaorn
Lookups that span relationships понял как работает, штука полезная но в данном случае она не поможет.

К примеру следующий код просто передаст в шаблон записи таблицы Portfolio но не передаст связанные записи из таблицы Portfolio_Image
portfolio_list = Portfolio.objects.filter(active=True, portfolio_image__position__contains='1')
Александр Кошелев
OZION
Daevaorn
Lookups that span relationships понял как работает, штука полезная но в данном случае она не поможет.

К примеру следующий код просто передаст в шаблон записи таблицы Portfolio но не передаст связанные записи из таблицы Portfolio_Image
Код:

portfolio_list = Portfolio.objects.filter(active=True, portfolio_image__position__contains='1')
Формируйте запрос через Portfolio_Image и всё получится.
OZION
Daevaorn
Формируйте запрос через Portfolio_Image и всё получится.
Все получится если запись в Portfolio_Image отвечающая условиям связанная с записью в Portfolio существует, а если такой записи не существует то описание в шаблон не попадет =(
OZION
в общем решил сделать по простому
в модель PortfolioImage добавил:
class Meta:
ordering = ['position']
views.py:
def portfolio(request):
portfolio_list = Portfolio.objects.filter(active="True")
return render_to_response('portfolio.html', {'portfolio_list': portfolio_list,})
portfolio.html:
			{% for portfolio in portfolio_list %}

<div class="block-element">
{%if portfolio.images.count %}
<a href="{{ portfolio.url }}">
<img align="left" border="0"
alt="{{ portfolio.images.all.0.alt }}"
src="{{ portfolio.images.all.0.image.url_150x150 }}"
>
</a>
{% endif %}
<h2><a class="header2" href="{{ portfolio.url }}">{{ portfolio.name }}</a></h2>
{{ portfolio.description|safe }}
<div class="data">
{%if portfolio.vinyl %}
Пленки: {{ portfolio.vinyl }}<br/>
{% endif %}
Срок работы: {{ portfolio.term }}<br/>
Стоимость: {{ portfolio.cost_num }} {{ portfolio.cost_char }}<br/>
</div>
</div>
{% endfor %}
Когда опыта наберусь то попробую перенести логику в views.py из шаблона
Ferroman
Не надо ничего переносить - всё именно так, как надо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB