Изображения, которые не фильтруются на основе вошедшего в систему пользователя

#django

#django

Вопрос:

Я создаю фотогалерею в качестве своего последнего проекта. Фотограф может войти на сайт и загрузить фотографии в свое портфолио. Эта часть кода работает. Однако изображения не фильтруются на основе зарегистрированного пользователя. Вместо этого я получаю все изображения от всех пользователей, как и вы, на домашней странице. Я новичок в Django и веб-разработчике в целом, и я застрял с этим уже три дня. Я буду благодарен за любую помощь и еще более благодарен за достойное объяснение :). Заранее большое вам спасибо.

Я попытался изменить запрос с помощью функции get_queryset, но мне, вероятно, не хватает знаний, чтобы сделать это правильно. Я попытался сопоставить свое поле пользователя с пользовательской таблицей, но тоже безрезультатно. Я все еще изучаю половину того, как работает Django. Я прошел долгий путь, просто просмотрев некоторые документы и учебные пособия, но довольно сильно застрял в этом.

 models.py:

class CustomUser(AbstractUser):

    full_name = models.CharField(max_length=200, default='')
    profile_picture = models.ImageField(upload_to='media/img', blank=True, null=True)
    introduction = models.TextField(default='')
    def __unicode__(self):
        return self.email


class Pictures(models.Model):

    picture = models.ImageField(upload_to='img', blank=True, null=True)
    date = models.DateTimeField(default=timezone.now())
    views = models.IntegerField(default=0)
    likes = models.IntegerField(default=0)

    CHOICES = (
        ("nature", "Nature"),
        ("animals", "Animals"),
        ("cars", "Cars"),
        ("cities", "Cities"),
        ("fitness", "Fitness"),
        ("motorcycles", "Motorcycles"),
        ("people", "People"),
        ("space", "Space"),
        ("technology", "Technology"),
        )
    category = models.CharField(max_length=10, choices=CHOICES, default="nature")
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, default=1)

    def __unicode__(self):
        return self.picture


views.py:

class SignUp(generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'


class UploadImageView(generic.CreateView):
    form_class = UploadImageForm
    success_url = reverse_lazy('profile')
    template_name = 'users/profile.html'


class ShowPortfolioImagesList(ListView):
    template_name = 'users/portfolio.html'
    queryset = Pictures.objects.filter(user=request.user)
    context_object_name = 'pictures_list'
    ordering = ['-date']


portfolio.html:

{% extends 'base.html' %}

{% block title %}Profile | {{ user.full_name }}{% endblock %}

{% block content %}

{% if user.is_authenticated %}

<h2>Your Portfolio</h2>

{% for picture in pictures_list %}
<div>
  <img src="{{MEDIA_URL}}{{picture.picture}}"></img>
</div>
{% endfor %}

{% else %}

<p>You are not logged in</p>
<a href="{% url 'login' %}">login</a> |
<a href="{% url 'signup' %}">signup</a>

{% endif %}
{% endblock %}
 

Я ожидаю, что фотограф будет видеть свои фотографии только при входе в систему, а не фотографии всего веб-сайта.

Ответ №1:

 class ShowPortfolioImagesList(ListView):
    template_name = 'users/portfolio.html'
    context_object_name = 'pictures_list'
    ordering = ['-date']

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

это должно сработать. Вероятно, вам не хватает self доступа к объекту запроса