Формы и представления для пользовательской модели пользователя с дополнительными параметрами [django 2.1] - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь создать форму, которая позволила бы мне добавить изображение профиля в пользовательский объект User. Я знаю, что есть метод OneToOne, хотя я хочу, чтобы он был сохранен непосредственно в User.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вам необходимо расширить модель пользователя по умолчанию следующим образом:

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})
0 голосов
/ 29 октября 2018

Посмотрите на код ниже

from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm

# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponseRedirect('/success/url/')
    else:
        form = UploadFileForm()
    return render(request, 'upload.html', {'form': form})

Для получения дополнительной информации, пожалуйста, проверьте https://docs.djangoproject.com/en/dev/topics/http/file-uploads/

...