django模型多對多調用

 

對於以下的模型: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

相關文章
相關標籤/搜索