2010-08-20 4 views
1

Il existe un modèle:Django ORM Question: obtenir « a beaucoup de » relation objets

class DomainPosition(models.Model): 
    domain = models.ForeignKey(Domain) 
    keyword = models.ForeignKey(Keyword) 
    date  = models.DateField() 
    position = models.IntegerField() 

    class Meta: 
     ordering = ['domain', 'keyword'] 

Comment obtenir les positions des enregistrements pour un modèle si pour chaque domaine que je veux afficher un tableau suivant (chiffres du tableau sont des valeurs de position):

+----------+--------+--------+-------+-------- 
| keyword | date1 | date2 | date3 | ... 
+----------+--------+--------+-------+-------- 
| keyword1 | 2 | 6 | 7 | ... 
+----------+--------+--------+-------+-------- 
| keyword2 | 4 | 12 | 5 | ... 
+----------+--------+--------+-------+-------- 
| keyword3 | 6 | 3 | 9 | ... 
+----------+--------+--------+-------+-------- 

views.py:

def show_domain_history(request, domain_name): 
    domain = Domain.objects.filter(name__contains=domain_name) 
    if not domain: 
     return HttpResponseRedirect('/') 
    else: 
     # positions = ... 
     variables = RequestContext(request, { 
      'domain': domain[0].name, 
      'positions': positions, 
     }) 
     return render_to_response('history.html', variables) 

Répondre

0

Puisque vous ayiez e une clé étrangère de DomainPosition à Domain, vous devriez être en mesure d'obtenir l'ensemble de toutes les positions de domaine qui référencent un domaine particulier dom avec dom.domainposition_set.all().

Vous pouvez ensuite générer votre table en itérant sur cette liste de positions de domaine dans votre modèle.

+0

Et ne pas oublier que vous n'avez pas besoin des parenthèses après 'all' lorsque vous êtes dans le modèle. –

+0

Avons-nous besoin de "tout" atall? –

1
def show_domain_history(request, domain_name): 
    domain = Domain.objects.filter(name__contains=domain_name) 
    if not domain: 
     return HttpResponseRedirect('/') 
    else: 
     variables = {'domain': domain } 
     return render_to_response('history.html', variables) 

maintenant dans le modèle que vous pouvez itérer ce que:

{% for dom in domain %} 

name: {{ dom.name }} 

{% for item in dom.domainposition_set %} 

    date: item.date 

    position: item.position 
{% endfor %} 

{% endfor %} 
Questions connexes