python - Django Rest-Framework 查询数据库

标签 python django routes django-rest-framework

我有 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/

相关文章:

asp.net-mvc - ASP.NET MVC 5 路由,在 URL 中隐藏数据

c# - 特定 Controller 的路由

routes - 获取事件路线并将其应用到 View 中的导航

python - 如何对元组中的一组列表中的第一个值求和?

python - 使用带有不正确标签的 Python ElementTree 解析 XML

python - 如何在 graphene-django GraphQLTestCase 中使用 django-grahql-jwt 进行身份验证?

django - 运行时跟踪方法解析顺序

python - 在 `self` 语句中使用 `with` 作为上下文

Python 字符串难点

Python Social Auth 多范围额外数据