2017-11-10 35 views
0

Djangoクラスベースのビューで使用されるクエリセットを制限するために、ログインしているユーザーのプロファイルモデルのフィールドを使用します。Djangoプロファイルフィールドを使用してリストビューのクエリセットを制限する

私のモデルは以下のとおりです。

# 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と同じ教師はschoolと同じですログインしたユーザーのProfileこれがうまくいくように

答えて

2

は思え:

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

私はエラーが取得しています:TemplateDoesNotExist –

+0

さて、この質問に関連していないようです。 –

+0

私はget_queryset(self)の上にtemplate_name = "eduly/teacher_list.html"を追加する必要がありました。 get_querysetを使わないと、私はtemplate_nameは必要ありません。フィルタは空のクエリを返しています。 –

関連する問題