Я немного новичок в Django и искал несколько простых примеров создания объектов с подобъектами в представлениях, чтобы в шаблонах я мог иметь вложенные циклы.
Вот мой 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 я хотел бы создать объект со списком / массивом сгруппированных состояний Рынка (по-разному) в порядке убывания, каждое из которых содержит подмассив отдельных имен Рынка в этом Состоянии для завершения вложенного forloop в шаблоне.
Язык шаблонов в 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 нет ошибок, все хорошо, мне просто нужно несколько советов по правильному созданию объекта в представлении, чтобы шаблон помог.