對於以下的模型:html
from django.db import models # Create your models here. class Student(models.Model): name = models.CharField(max_length=128) class Course(models.Model): name = models.CharField(max_length=128) students = models.ManyToManyField('Student')
模型Course有一個多對多字段指向Student模型。django
正向查詢
假設編寫了一個以下的視圖:spa
def test(request): course = models.Course.objects.get(pk=1) return render(request, 'course.html', locals())
獲取了id爲1的course對象,並將它傳遞給course.html模版,模版代碼以下:code
{% for student in course.students.all %}
<p>{{ student.name }}</p> {% endfor %}
首先經過course.students.all
,查尋到course對象關聯的students對象集,而後用for標籤循環它,獲取每一個student對象,再用student模型的定義,訪問其各個字段的屬性。htm
反向查詢
對於反向查詢,從student往course查,假設有以下的視圖:對象
def test2(request): student = models.Student.objects.get(pk=1) return render(request, 'student.html', locals())
獲取了id爲1的student對象,並將它傳遞給student.html模版,模版代碼以下:get
{% for course in student.course_set.all %} {{ course.name }} {% endfor %}
經過student.course_set.all
,反向獲取到student實例對應的全部course對象,而後再for標籤循環每一個course,調用course的各類字段屬性。it
對於外鍵ForeignKey,其用法基本相似。只不過正向是obj.fk
,且只有1個對像,不是集合。反向則是obj.fk_set
,相似多對多。class