如何通过Listview django获取用户的照片列表

时间:2017-06-05 08:14:26

标签: django listview get photo

所有

我想使用Listview仅显示用户的照片列表而不是其他用户的照片列表。但它不起作用。用户可以获得其他用户的照片。

这是views.py

class PhotoListView(ListView):
model = Photo

def get(self, *args, **kwargs):

    #if user connect to other user's page, go to the user's page.
    if kwargs['username'] != self.request.user.username:
         return redirect('index')

    #to get only user's photo list.
    username = self.request.user.username
    return super(PhotoListView, self).get(username=username, *args, **kwargs)

这是model.py

class Photo(models.Model):
    user = models.ForeignKey(User)
    image_file = ProcessedImageField(upload_to='%Y/%m/%d/orig', format='JPEG', options={'quality': 100})
    source = TaggableManager(through=Taggedsource, related_name='source')
    subject = TaggableManager(through=Taggedsubject, related_name='subject')
    description = models.TextField(max_length=500, blank=True)
    comments = models.PositiveSmallIntegerField(default=0, null=True)
    posted_on = models.DateTimeField(default=datetime.now)

2 个答案:

答案 0 :(得分:1)

您应该修改get_queryset方法:

class PhotoListView(ListView):
    model = Photo

    def get_queryset(self):
        photos = super().get_queryset()
        username = self.request.user.username
        photos = photos.objects.filter(user=username)
        return photos

    def get(self, *args, **kwargs):

        #if user connect to other user's page, go to the user's page.
        if kwargs['username'] != self.request.user.username:
            return redirect('index')

答案 1 :(得分:1)

在views.py

class PhotoListView(ListView):
model = Photo

def get(self, *args, **kwargs):

    #if user connect to other user's page, go to the user's page.
    if kwargs['username'] != self.request.user.username:
        return redirect('index')

    #to get only user's photo list.
    username = self.request.user.username
    photos = Photo.objects.filter(user=username)
    return photos

Photo.objects.filter(user=username)只会获得该用户的照片。