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