2015-11-22 3 views
2

У меня есть 2 модели:Джанго база отдыха-Framework Запросы

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 

И два viewsets:

class CourseViewSet(viewsets.ModelViewSet): 
    queryset = Course.objects.all() 
    serializer_class = CourseSerializer 

class LectureViewSet(viewsets.ModelViewSet): 
    queryset = Lecture.objects.all() 
    serializer_class = LectureSerializer 

И я пытаюсь сделать так, чтобы при нажатии на курс link, он возвращает только лекции, данные в этом курсе. Я могу сделать это из переднего конца, фильтруя после возвращения всех лекций, однако мне трудно понять, как запросить базу данных в Django. Может кто-нибудь помочь мне понять это?

Благодаря

ответ

2

Вы можете фильтровать lectures на основе курса по надкольцу метода get_queryset в LectureViewSet как:

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 

Теперь в запросе вам необходимо пройти курс идентификатор в URL, когда курс щелкнул как:

.../api/lectures?course=1 

выше запрос возвратит все лекции с курса ID 1

+0

Благодарим вас за ответ. Разве это не означает, что мне нужно добавить URL для всех курсов? Разве нет способа сделать это только с одним URL? – tryingtolearn

+0

@tryingtolearn no будет только один url '.../api/lectures', вам нужно добавить'? Course = 1' или '? Course = 2'. , , к URL-адресу, основанному на курсе, нажатом. –

+0

фантастический это действительно работает. Однако это работает с идентификатором объекта курса? Есть ли способ получить доступ к этой информации с конца webapp? Как сохранить эту информацию в объекте модели? – tryingtolearn

Смежные вопросы