Skip to main content
 首页 » 编程设计

python之Django Rest-Framework 查询数据库

2024年10月24日29cyq1162

我有 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)过滤 lectures,例如:

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 的讲座