2015-06-28 22 views
0

我開始使用django,我想從三個相關模型中獲取特定數據。 我的模型是從django的三個模型獲取特定數據

class Institution(models.Model): 
    name = models.CharField(max_length=100, unique=True) 
    ... 

class Certification(models.Model): 
    name = models.CharField(max_length=100) 
    ... 

class Course(models.Model): 
    name = models.CharField(max_length=100) 
    institution = models.ForeignKey(Institution) 
    certification = models.ForeignKey(Certification) 

在我的html頁面,我想顯示由認證下令特定機構提供的課程。這樣

name of a particular institution I 
    certification 1 
     list courses that offer certification 1 
    certification 2 
     list courses that offer certification 2 
    ... 

我現在的模板是

{{institution.name}} 
{% for certification in preselected_certifications %} 
    <h1> {{ certification.name }} </h1> 
    <ul> 
      {% for course in courses %} 
      <li>{{ course.name }}</li> 
      {% endfor %} 
    </ul> 
{% endfor %} 

我看來

def detail(request, slug): 
    context = RequestContext(request) 
    context_dict = {'slug_requested': slug} 
    try: 
     institution = Institution.objects.get(slug=slug) 
     courses = Course.objects.filter(etablissement=etablissement) 

     context_dict['courses'] = courses 
     context_dict['institution'] = institution 

    except Institution.DoesNotExist: 
     pass 

    return render_to_response('institutition/details.html', context_dict, context) 

我的問題是,使其僅包含通過所有課程在選定的機構提供的認證是如何定義「preselected_certifications」 ,但沒有重複任何認證

+0

但是你沒有定義任何叫做'preselected_certifications'的東西。 –

+0

'etablissement'從哪裏來,你用來過濾'課程'?所提供的代碼似乎不完整。此外,您在呈現模板時不分配preselected_certification。 – Mischback

+0

多數民衆贊成我的問題!如何定義preselected_certifications! –

回答

0

問題:

所以它僅包含在所選機構的所有課程提供認證是如何定義「preselected_certifications」,但沒有任何重複認證

我不知道你到底如何想代表這個信息(意思是,你要提供哪些屬性),但認爲你想要的東西類似如下:

def detail(request, slug): 
    ... 
    institution = Institution.objects.get(slug=slug) 

    # `select_related` not strictly necessary 
    courses = institution.course_set.all().select_related('certification') 

    context_dict['courses'] = courses 
    context_dict['institution'] = institution 

現在,每個course對象將擁有其訪問關係和你可能遍歷它們以顯示唯一的。

但是,如果你想從一開始就這些certification s爲唯一保證,這樣做的一個方法是用另一個查詢:

institution = Institution.objects.get(slug=slug) 
    courses = institution.course_set.select_related('certification') 
    certification_ids = courses.values_list('certification_id', flat=True).distinct() 
    preselect_certifications = Certification.objects.filter(id__in=certification_ids) 

這最後的查詢將讓你的獨特的認證特定機構。

看起來好像Certification可能與Institution有關係,但是,不是嗎?

+0

好的,謝謝了很多,現在我在我的模板使用下面的代碼 {%用於認證preselect_certifications%} {{certification.name}} { %,持續課程課程%}

    {%如果認證= course.certification%}
  • {{course.name}}
  • {%ENDIF%}
{%ENDFOR%} { %ENDFOR%} 它完美,但有另一種方式,以避免使用 {%if certification = course.certification%} ? 再次感謝 –

+0

是的,對於每個認證只是遍歷其'course_set'。 – erewok

+0

使用我們的代碼建議,如果我通過course_set爲每個認證迭代,我會得到不在指定instituiton –

0

好的,謝謝了很多,現在我在我的模板下面的代碼

{% for certification in preselect_certifications %} 
    {{certification.name}} 
    {% for course in courses %} 
     <ul> 
     {% if certification = course.certification %} 
     <li>{{ course.name }}</li> 
     {% endif %} 
     </ul> 
    {% endfor %} 
{% endfor %} 

它完美,但有另一種方式,以避免使用

{% if certification = course.certification %} 

使用?

再次感謝

相關問題