Я новичок в Django и искал несколько простых примеров создания объектов с подобъектами в представлениях, чтобы в шаблонах можно было вложить циклы for.
Вот мой models.py для этого приложения ...
from django.db import models
from django import forms
class Market(models.Model):
name = models.CharField('Market name', max_length=150)
state = models.CharField('State', max_length=2)
def __unicode__(self):
return self.name
class Location(models.Model):
name = models.CharField('Location name', max_length=150)
address1 = models.CharField('Address 1', max_length=200)
address2 = models.CharField('Address 2', max_length=200,blank=True)
city = models.CharField('City', max_length=100)
state = models.CharField('State', max_length=2)
zip_code = models.CharField('ZIP', max_length=10)
phone = models.CharField('Phone', max_length=20)
hours = models.TextField('Hours of operation', max_length=255)
quote_text = models.TextField('Customer quote', max_length=500)
quote_by = models.CharField('Customer name', max_length=30)
yelp_url = models.URLField('Yelp URL', max_length=300,blank=True)
image_store = models.ImageField('Storefront image', upload_to='images/locations', max_length=300,blank=True)
image_staff = models.ImageField('Staff image', upload_to='images/locations', max_length=300,blank=True)
market = models.ForeignKey(Market, verbose_name='Regional market', null=True)
def __unicode__(self):
return self.name
Данные по рынкам могут выглядеть следующим образом ...
id = 1
state = 'MO'
name = 'St. Louis - Central'
id = 2
state = 'MO'
name = 'St. Louis - West'
id = 3
state = 'IL'
name = 'Chicago - South'
id = 4
state = 'IL'
name = 'Chicago - North'
В моем views.py я хотел бы создать объект со списком / массивом сгруппированных состояний рынка (отдельных) в порядке убывания, каждый с подмассивом отдельных Названия рынков в этом состоянии, чтобы завершить вложенный цикл в шаблон.
Язык шаблонов в Django действительно хорош тем, что предотвращает размещение тонны логики между HTML, что мне нравится. Но я все еще занимаюсь синтаксисом Python и необходимостью создавать все объекты именно так, как они должны повторяться в шаблоне.
Вот как выглядит views.py ...
def locations_landing(request):
marketList = Market.objects.values('state').order_by('-state').distinct()
return render_to_response('locations.html', locals())
Как вернуть объект, чтобы мой шаблон мог выполнить следующий вложенный цикл ...
{% for st in stateList.all %}
<h4>{{ st.state }}</h4>
{% for mkt in stateList.marketList.all %}
<p>* <a href="#">{{ mkt.name }}</a></p>
{% endfor %}
{% endfor %}
Это приведет к следующему, отображенному в html на основе моих образцов данных выше ...
<h4>MO</h4>
<p>* St. Louis - Central</p>
<p>* St. Louis - West</p>
<h4>IL</h4>
<p>* Chicago - South</p>
<p>* Chicago - North</p>
Кстати, нет ошибки в любом из приведенных выше примеров кода .PY, все в порядке, мне просто нужны некоторые рекомендации по правильному созданию объекта в представлении, чтобы шаблон справился со своей задачей.