我有 2 个模型:
class Course(models.Model):
title = models.CharField(max_length=128, unique=True)
semester = models.CharField(max_length=1, choices=SEMESTER)
lecturer = models.CharField(max_length=128)
def __str__(self):
return self.title
class Lecture(models.Model):
lecture_no = models.IntegerField(max_length=128, null=True)
title = models.CharField(max_length=128, unique=True, null=True)
course = models.ForeignKey(Course, null=True)
def __str__(self):
return self.title
和两个 View 集:
class CourseViewSet(viewsets.ModelViewSet):
queryset = Course.objects.all()
serializer_class = CourseSerializer
class LectureViewSet(viewsets.ModelViewSet):
queryset = Lecture.objects.all()
serializer_class = LectureSerializer
我正在尝试做到这一点,以便当您单击类(class)链接时,它只返回该类(class)中给出的讲座。我可以在返回所有讲座后通过过滤从前端执行此操作,但是我无法弄清楚如何在 Django 中查询数据库。有人可以帮我解决这个问题吗?
谢谢
最佳答案
您可以通过覆盖 LectureViewSet
中的 get_queryset
方法来根据类(class)过滤讲座
,如下所示:
class LectureViewSet(viewsets.ModelViewSet):
serializer_class = LectureSerializer
def get_queryset(self):
course_id = self.request.query_params.get('course',False)
if course_id:
lectures = Lecture.objects.filter(course=course_id)
else:
lectures = Lecture.objects.all()
return lectures
现在,在您的请求中,当单击类(class)时,您需要在 URL 中传递类(class) ID,如下所示:
.../api/lectures?course=1
上述请求将返回类(class) ID 为 1 的所有讲座
关于python - Django Rest-Framework 查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33857580/