Форум сайта python.su
Имеются две таблицы 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_list = Portfolio.objects.filter(active=True)
Отредактировано (Окт. 28, 2010 19:33:04)
Офлайн
если не питонячим способом
то можно делать див с картинкой в стиле <div><img="store_url/~/pics/{{id}}.jpeg></div>
где айдишник из портфолио точно указывает картинку.
но тогда по сути вторая модель не нужна.
Офлайн
Norecces
Для так можно сделать для данной страницы, на ней используется одна картинка, но есть страницы где много картинок как эта http://vinil4you.ru/portfolio/toyota-land-cruiser-150510/ для которой вторая модель уже необходима.
+ стоит цель - научится.
Отредактировано (Окт. 25, 2010 18:55:02)
Офлайн
OZIONТогда третий день – http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships
П.С. Два дня читаю доки но понимание того как это делается ко мне никак не придет, прошу вашей помощи.
OZIONОчень детальное описание проблемы.
Такой монстр у меня работать не захотел
Офлайн
Прошу прощения не точно сформулировал требования.
Не много изменил требования в первом посте.
Daevaorn
Lookups that span relationships понял как работает, штука полезная но в данном случае она не поможет.
К примеру следующий код просто передаст в шаблон записи таблицы Portfolio но не передаст связанные записи из таблицы Portfolio_Image
portfolio_list = Portfolio.objects.filter(active=True, portfolio_image__position__contains='1')
Офлайн
OZIONФормируйте запрос через Portfolio_Image и всё получится.
Daevaorn
Lookups that span relationships понял как работает, штука полезная но в данном случае она не поможет.
К примеру следующий код просто передаст в шаблон записи таблицы Portfolio но не передаст связанные записи из таблицы Portfolio_Image
Код:
portfolio_list = Portfolio.objects.filter(active=True, portfolio_image__position__contains='1')
Офлайн
DaevaornВсе получится если запись в Portfolio_Image отвечающая условиям связанная с записью в Portfolio существует, а если такой записи не существует то описание в шаблон не попадет =(
Формируйте запрос через Portfolio_Image и всё получится.
Офлайн
в общем решил сделать по простому
в модель PortfolioImage добавил:
class Meta:
ordering = ['position']
def portfolio(request):
portfolio_list = Portfolio.objects.filter(active="True")
return render_to_response('portfolio.html', {'portfolio_list': portfolio_list,})
{% 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 %}
Офлайн
Не надо ничего переносить - всё именно так, как надо.
Офлайн