2015-06-28 23 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 %} 

使用?

再次感谢

相关问题