使用 Django 配置文件字段限制列表视图的查询集

Using a Django profile field to restrict queryset of a list view

我想在登录用户的配置文件模型中使用一个字段来限制在基于 Django class 的视图中使用的查询集。

我的模特是:

# User profile info
class Profile(models.Model):

    # Relationship Fields
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    school = models.ForeignKey('eduly.School', default=1)

    notes = models.TextField(max_length=500, blank=True)


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

class School(models.Model):

    # Fields
    name = models.CharField(max_length=255)
    address = models.TextField(max_length=500, blank=True)
    email = models.CharField(max_length=30)
    phone = models.CharField(max_length=15)
    contactName = models.CharField(max_length=30)
    slug = extension_fields.AutoSlugField(populate_from='name', blank=True)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)


    class Meta:
        ordering = ('-created',)

    def __unicode__(self):
        return u'%s' % self.slug

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('eduly_school_detail', args=(self.slug,))


    def get_update_url(self):
        return reverse('eduly_school_update', args=(self.slug,))


class Teacher(models.Model):

    SCHOOL_ADMIN = 0
    CLASS_ADMIN = 1
    TASK_ADMIN = 2

    ROLES = {
        (SCHOOL_ADMIN, "School administrator"),
        (CLASS_ADMIN, "Class administrator"),
        (TASK_ADMIN, "Task administrator")
    }

    # Fields
    name = models.CharField(max_length=255)
    slug = extension_fields.AutoSlugField(populate_from='name', blank=True)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    email = models.CharField(max_length=30)
    roles = models.IntegerField("Role", choices=ROLES, default=1)

    # Relationship Fields
    school = models.ForeignKey('eduly.School', )

    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return self.name

    def __unicode__(self):
        return u'%s' % self.slug

    def get_absolute_url(self):
        return reverse('eduly_teacher_detail', args=(self.slug,))


    def get_update_url(self):
        return reverse('eduly_teacher_update', args=(self.slug,))

我试图限制其查询集的视图是:

@method_decorator(login_required, name='dispatch')
class TeacherListView(ListView):
    model = Teacher

    def get_queryset(self):
            return Teacher.objects.filter(user=self.request.user)

但是我不想列出 return Teacher.objects.filter(user=self.request.user),而是只列出 school 与登录用户 Profile.[=17 中的 school 相同的教师=]

似乎这样行得通:

Teacher.objects.filter(school=self.request.user.profile.school)