Изображения профилей пользователей в Django
Джанго имеет встроенную форму UserCreatioonForm для создания пользователей. В ней есть такие поля, как имя и фамилия, электронная почта и т.д. Но можно ли сделать поле для загрузки изображений, которые будут использоваться как фотографии профиля пользователя?
Я пытался прочитать о дополнительных полях ввода на сайте djangoproject.com/docs, но это было довольно загадочно.
Нет, в Django нет поля для фотографий профиля. Вы создадите модель, которая будет иметь отношение один к одному с моделью User, и тогда вы сможете использовать изображение, сохраненное в этой модели.
models.py
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='profile_pics', null=True,
blank=True)
def __str__(self):
return self.user.username
views.py -> загрузка и обновление профиля
from .models import Profile
from django.shortcuts import render, get_object_or_404
def upload_avatar(request):
profile = get_object_or_404(Profile, user=request.user)
if request.method == 'POST':
profile.avatar = request.FILES.get('avatar')
profile.save()
return redirect(request.META.get('HTTP_REFERER'))
profile.html
{% if request.user.profile.avatar %}
<img src="{{ request.user.profile.avatar.url }}" alt=" avatar-picture">
{% endif %}