在 Django 中,多对多关系可以通过使用 ManyToManyField
字段来实现。在这个例子中,我们将展示如何使用 Django ORM 查询多对多关系。
首先,我们需要定义两个模型,一个是 Course
,另一个是 Student
。Course
模型有一个 ManyToManyField
字段 students
,用于表示学生和课程之间的多对多关系。
from django.db import models
class Student(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Course(models.Model):
name = models.CharField(max_length=100)
students = models.ManyToManyField(Student, related_name='courses')
def __str__(self):
return self.name
接下来,我们将展示如何使用 Django ORM 查询多对多关系。
student = Student.objects.get(name='张三')
courses = student.courses.all()
course = Course.objects.get(name='数学')
students = course.students.all()
student_count = Student.objects.annotate(course_count=Count('courses')).get(name='张三').course_count
course_count = Course.objects.annotate(student_count=Count('students')).get(name='数学').student_count
student = Student.objects.get(name='张三')
course = Course.objects.get(name='数学')
intersection = student.courses.filter(id=course.id)
student = Student.objects.get(name='张三')
course = Course.objects.get(name='数学')
union = student.courses.union(course.students.all())
student = Student.objects.get(name='张三')
course = Course.objects.get(name='数学')
difference = student.courses.exclude(id=course.id)
通过以上示例,我们展示了如何使用 Django ORM 查询多对多关系。在实际应用中,您可以根据需求进行相应的查询和操作。
领取专属 10元无门槛券
手把手带您无忧上云