Я строю Фотогалерею как мой последний проект. Фотограф может войти на сайт и загрузить фотографии в свое портфолио. Эта часть кода работает. Тем не менее, изображения не фильтруются на основе вошедшего в систему пользователя. Вместо этого я получаю все фотографии от всех пользователей, как вы бы на домашней странице. Я новичок в 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 %}
Я ожидаю, что Фотограф будет видеть только свои фотографии при входе в систему, а не фотографии всего сайта.