Вам необходимо расширить модель пользователя по умолчанию следующим образом:
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
"""Add more fields to default user model."""
profile_pic = models.ImageField(upload_to='profile_pics', blank=True, null=True)
Теперь вам нужно отредактировать файл settings.py, чтобы сделать вашу пользовательскую модель пользователя моделью аутентификации по умолчанию. Добавьте эту строку в ваши settings.py:
AUTH_USER_MODEL = 'myApp.User'
myApp - это имя приложения, в котором models.py вы создали свою пользовательскую модель.
И это все, теперь моделью аутентификации по умолчанию является ваша пользовательская модель User
, которая точно такая же, как и модель аутентификации по умолчанию в Django, за исключением того, что в ней есть дополнительное поле profile_pic
для хранения изображения.
Форма для добавления картинки должна быть такой:
class profilepictureForm(forms.ModelForm):
"""Form to add profile picture to User model."""
class Meta:
"""Meta class for profilepictureForm."""
model = User
fields = ('profile_pic', )
И, по вашему мнению, вы должны использовать эту форму следующим образом:
def add_profile_picture(request):
if request.method == 'POST':
form = profilepictureForm(request.POST, request.FILES, instance=request.user)
if form.is_valid():
form.save()
return HttpResponseRedirect('/success/url/')
else:
form = profilepictureForm(instance=request.user)
return render(request, 'userpanel/profilepicture.html', {'form': form})