Картинки не отфильтрованы по зарегистрированному пользователю - PullRequest
0 голосов
/ 13 апреля 2019

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

Я пытался изменить запрос с помощью функции 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 Ответ

0 голосов
/ 13 апреля 2019
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 для доступа к объекту запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...