基于外键的Djang查询集

2024-05-29 11:01:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在学习Django的同时,我正在创建一个示例应用程序,其中我有两种类型的用户:学生和教育者。教育者可以创建学习部分,学生可以选择他们想参与的内容(只是一个布尔字段“是”或“否”)。我想为每项研究创建一个“查看参与者”页面,以便教育者可以看到哪些学生参与了每个部分。要对每个学习部分执行此操作,我需要查询所有标记为“是”以参与该学习部分的学生用户。我对如何使用Django的QuerySet方法来实现这一点有点纠结。你知道吗

这是我的型号.py你知道吗

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_educator = models.BooleanField(default=False)


class Interest(models.Model):
...


class Study(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='studies')
    name = models.CharField(max_length=255)
    interest = models.ForeignKey(Interest, on_delete=models.CASCADE, related_name='studies')

    def __str__(self):
        return self.name


class Detail(models.Model):
...


class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    interests = models.ManyToManyField(Interest, related_name='interested_students')

    def get_details(self, study):
        details = study.details.all().order_by('start_date')
        return details

    def __str__(self):
        return self.user.username


class StudentAnswer(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='study_answers')
    study = models.ForeignKey(Study, on_delete=models.CASCADE, related_name='study_participate', null=True)
    participate = models.BooleanField('Correct answer', default=False)

我想写一封信视图.py功能如下:

@method_decorator([login_required, educator_required],     name='dispatch')
class StudyResultsView(DetailView):
    model = Study
    context_object_name = 'study'
    template_name = 'classroom/educators/study_results.html'

    def get_context_data(self, **kwargs):
        study = self.get_object()
        participants = study.????
        total_participants = participants.count()
        extra_context = {
            'participants': participants,
            'total_participants': total_participants,
        }
        kwargs.update(extra_context)
        return super().get_context_data(**kwargs)

    def get_queryset(self):
        return self.request.user.studies.all()

但是我不知道在participants = study.????处应该有什么正确的查询,以便为该研究选择所有标记为participate=True的用户。你知道吗


Tags: nameselfgetmodelreturnonmodelsdef

热门问题