#python #django #templates #view #model
#python #django #шаблоны #Вид #Модель
Вопрос:
Любая помощь в этом была бы очень признательна.
Я расширил модель пользователя Django с помощью отношения OneToOne на другую модель с именем UserProfile, которая содержит поле изображения с именем profile_pic .
Настройки для корневой папки мультимедиа настроены правильно в settings.py и упоминается в корне urls.py .
Что-то не так с представлением на основе классов, общим ListView для отображения сообщений о продукте пользователя, или я неправильно ссылаюсь на profile_pic в шаблоне.
Есть идеи о том, как отобразить изображение профиля каждого пользователя в их связанном профиле пользователя? В настоящее время, когда пользователь входит в систему, его / ее изображение отображается в каждом профиле. Использование Django 3.1.2
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_pic = models.ImageField(default='default_profile_pic.jpg', upload_to='profile_pics')
class Meta:
verbose_name_plural = "User Profiles"
def __str__(self):
return f'{self.user.username} UserProfile'
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
views.py
class ProfileListView(ListView):
model = Product
template_name = 'users/profile.html'
context_object_name = 'products'
paginate_by = 12
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Product.objects.filter(user=user).order_by('-creation_date')
profile.html
{% if user.userprofile.profile_pic %}
<img class="rounded-circle" src="{{ user.userprofile.profile_pic.url }}" alt="">
{% else %}
<img class="rounded-circle" src="media/default_profile_pic.jpg" alt="">
{% endif %}
Комментарии:
1.
user
автоматически заполняется текущим зарегистрированным пользователем, когда у вас естьdjango.core.context_processors.auth
список ваших контекстных процессоров. Ваше представление имеет имяProfileList
, но оно возвращаетProduct
объекты, а имя контекстной переменнойproducts
равно . Вы не определяетеuser
себя.2. Спасибо @Selcuk, я ценю понимание. Не могли бы вы предложить мне изменить модель ProfileList = UserProfile и контекстную переменную на userprofile ? Если это так, у меня не будет доступа к продуктам. Что может быть эффективным способом определения пользователя при создании его продуктов, доступных в представлении списка профилей? Модель продукта имеет отношение ForeignKey к пользователю. Еще раз спасибо. Это немного искажает мой разум.
3. Я разберусь с этим. Собираюсь переработать ProfileListView.
4. Это зависит от того, что вы хотите от этого представления. Если он предназначен для возврата списка продуктов, принадлежащих указанному пользователю (но не обязательно зарегистрированному пользователю), сохраните код (возможно, переименуйте его в
ProductListView
для согласованности) и используйте{{ product.user.userprofile.profile_pic.url }}
в своем шаблоне.