Набор запросов Django для внешних атрибутов - PullRequest
0 голосов
/ 22 сентября 2018

Я должен выбрать таблицу результатов в соответствии с этим: Выбрать сессию -> Выбрать курс -> Здесь будут показаны все результаты студента

Проблема в том, что я не могу запросить всех конкретных студентов, посещавших курсэтой сессии.

Моя модель для результата:

class Course(models.Model):
    cid = models.AutoField(primary_key=True)

class Student(models.Model):
    sroll = models.IntegerField()

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

class Session(models.Model):
    sesid = models.IntegerField(primary_key=True,verbose_name= ('Session'))

class Registration(models.Model):
    session = models.ForeignKey(Session, on_delete=models.CASCADE)
    course = models.ForeignKey(Course, on_delete=models.CASCADE)

class Assignation(models.Model):
    reg = models.ForeignKey(Registration, on_delete=models.CASCADE, null=True)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, null=True)

class Result(models.Model):
    asign = models.ForeignKey(Assignation, on_delete=models.CASCADE, null=True)
    student = models.ForeignKey(Student, on_delete=models.CASCADE, null=True)
    ct1 = models.FloatField(null=True, blank=True)

My views.py имеет:

@method_decorator(login_required, name='dispatch')
class SelectSession(ListView):
    template_name = 'Dashboard/selectsession.html'
    model = Session
    fields = ['sesid']

    def get_queryset(self):
        return Session.objects.all()

@method_decorator(login_required, name='dispatch')
class SelectCourse(ListView):
    template_name = 'Dashboard/selectcourse.html'
    model = Course, Registration
    fields = ['all']

    def get_queryset(self):
        course = Registration.objects.filter(session_id=self.kwargs['pk'])
        return course

@method_decorator(login_required, name='dispatch')
class BatchResult(ListView):
    template_name = 'Dashboard/batchResult.html'
    model = Result,Student,Registration,Assignation
    fields = ['all']

    def get_queryset(self):
        result=Result.objects.filter(???=self.kwargs['pk'])
        return result

1 Ответ

0 голосов
/ 23 сентября 2018

Вместо pk используйте session_pk для обеспечения читабельности кода.

Вместо session_id оно должно быть session при get_queryset() функции в SelectCource классе

 def get_queryset(self):
    course = Registration.objects.filter(session=self.kwargs['pk'])
    return course

Также для определенного сеанса будет несколько курсов, что означает, что в ответе course будет содержаться несколько объектов -

 def get_queryset(self):
    course = Registration.objects.filter(session=self.kwargs['pk'])
    assignation_objects = Assignation.objects.filter(reg__in=course)
    result = Result.objects.filter(assign__in=assignation_objects )
    return result

Обратитесь к Справочнику по API Queryset https://docs.djangoproject.com/en/2.1/ref/models/querysets/#in для получения дополнительной информации.по работе с набором запросов

...