#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
доступа к объекту запроса