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
これがうまくいくように
私はエラーが取得しています:TemplateDoesNotExist –
さて、この質問に関連していないようです。 –
私はget_queryset(self)の上にtemplate_name = "eduly/teacher_list.html"を追加する必要がありました。 get_querysetを使わないと、私はtemplate_nameは必要ありません。フィルタは空のクエリを返しています。 –