Je suis un peu nouveau à Django et j'ai cherché des exemples simples de création d'objets avec des sous-objets dans les vues afin que je puisse avoir imbriqué des boucles.Django newbie question concernant la définition d'un objet avec des sous-objets des modèles
Voici mon models.py pour cette application ...
donnéesfrom 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
Les marchés peuvent se présenter comme suit ...
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'
Dans mon views.py Je voudrais créer un objet avec une liste/tableau d'états de marché groupés (distincts) dans l'ordre décroissant, chacun avec un sous-tableau des noms de marché individuels dans cet état afin de compléter un forloop imbriqué dans le modèle. Le langage de gabarit dans Django est vraiment cool dans la façon dont il empêche une tonne de logique de résider entre le html, que j'aime. Mais je suis encore en train de faire le tour de la syntaxe Python et de la nécessité de créer tous les objets exactement de la manière dont ils ont besoin d'itérer dans le template.
Voici ce que views.py ressemble ...
def locations_landing(request):
marketList = Market.objects.values('state').order_by('-state').distinct()
return render_to_response('locations.html', locals())
Comment retourner un objet pour que mon modèle peut effectuer la mise en boucle imbriquée suivante ...
{% for st in stateList.all %}
<h4>{{ st.state }}</h4>
{% for mkt in stateList.marketList.all %}
<p>* <a href="#">{{ mkt.name }}</a></p>
{% endfor %}
{% endfor %}
Cela entraînerait ce qui suit rendu en html basé sur mes échantillons de données ci-dessus ...
<h4>MO</h4>
<p>* St. Louis - Central</p>
<p>* St. Louis - West</p>
<h4>IL</h4>
<p>* Chicago - South</p>
<p>* Chicago - North</p>
BTW, il n'y a pas d'erro rs dans l'un des exemples de code .PY ci-dessus, tout va bien, j'ai juste besoin de quelques conseils sur la création de l'objet correctement dans la vue afin que le modèle le fasse.
Brillant, pas sûr pourquoi je ne pouvais pas trouver cela, mais une bonne réponse. Fera juste cela. Le modèle de marché n'a pas été correctement normalisé de toute façon avec le champ d'état contenant des valeurs en double. Donc va se séparer comme vous le suggérez. À votre santé. – sansjoe