davidlopez
davidlopez

Reputation: 1

Listing querysets in django template system

I have the following model:

 class Student(models.Model):
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    skypeid = models.CharField(max_length=100)
    email = models.EmailField(max_length=75)
    youtubechannel = models.URLField(max_length=200)

    def __unicode__(self):
            return self.surname

class LanguageKnowledge(models.Model):

    LOW = 'LOW'
    MEDIUM = 'MED'
    ADVANCED = 'ADV'
    EXPERT = 'EXP'

    LANGUAGE_KNOWLEDGE_CHOICES =(
    (LOW, 'LOW'),
    (MEDIUM, 'Medium'),
    (ADVANCED,'Advanced'),
    (EXPERT, 'Expert'),
    )


    student = models.ForeignKey(Student)
    language = models.ForeignKey(Language)
    grammar = models.CharField(max_length=3, choices=LANGUAGE_KNOWLEDGE_CHOICES)
    reading = models.CharField(max_length=3, choices=LANGUAGE_KNOWLEDGE_CHOICES)
    speaking = models.CharField(max_length=3, choices=LANGUAGE_KNOWLEDGE_CHOICES)
    writing = models.CharField(max_length=3, choices=LANGUAGE_KNOWLEDGE_CHOICES)

    def __unicode__(self):
            return u'%s : %s' % (self.student, self.language)

Then the following view

def student(request, student_id):
    try:
        studentdetails = Student.objects.get(pk=student_id)
        languageknowledge_list = LanguageKnowledge.objects.filter(student__id__exact=student_id)
    except Student.DoesNotExist:
        raise Http404
    return render(request, 'broker/student.html',
                  {'studentdetails': studentdetails, 
                   'languageknowledge_list': languageknowledge_list})

However the following template does not list the different languages that are present in languageknowledge_list. As a more general question, how can I list, via template, a query set involving one to many relationships (e.g. a student speaking several languages) ?

{% block content %}
    <ul>
        {% for languageknowlege in languageknowledge_list %}
            <li>{{ languageknowledge.language }}, h2 got it,</li>
        {% endfor %}
    </ul>
{% endblock %}

Upvotes: 0

Views: 54

Answers (1)

Omid Raha
Omid Raha

Reputation: 10690

You have misspelling in your template for languageknowledge variable.

Change this line:

{% for languageknowlege in languageknowledge_list %}
    <li>{{ languageknowledge.language }}, h2 got it,</li>

To:

{% for languageknowledge in languageknowledge_list %}
    <li>{{ languageknowledge.language }}, h2 got it,</li>

Note that it's better to using good ide that at least have spell checker, also separate your name of variables by _ when are combinatorial, for example using language_knowledge instead of languageknowledge to help spell checker to better detect typo.

Upvotes: 1

Related Questions