django-allauth Пользовательская форма регистрации.Как добавить поле с изображением uploadI (поле изображения)? - PullRequest
0 голосов
/ 03 июня 2018

Я использую Джанго и Аллаута.Мне нужно, чтобы пользователь мог загружать фотографии при регистрации.В данный момент форма работает, но выбранное фото не загружается

Models.py:

class Profile(AbstractUser):
bdate = models.DateField( blank=True, null=True, default="1990-01-01")
photo = models.ImageField(upload_to='accounts/', blank=True, null=True, default=""  )
phone = models.CharField(max_length=128, blank=True, null=True, default=""  )

def __str__(self):
    return "%s, %s" % (self.username, self.first_name)

class Meta:
    verbose_name = 'Пользователя'
    verbose_name_plural = 'Пользователи'

Adapter.py

class AccountAdapter(DefaultAccountAdapter):
def save_user(self, request, user, form, commit=False):
    data = form.cleaned_data
    user.username = data.get('username')
    user.email = data['email']
    user.first_name = data['first_name']
    user.last_name = data['last_name']
    user.bdate = data['bdate']
    user.photo = data['photo']
    user.phone = data['phone']
    if 'password1' in data:
        user.set_password(data['password1'])
    else:
        user.set_unusable_password()
    self.populate_username(request, user)
    if commit:
        user.save()
    return user

Forms.py

class SignupForm (forms.Form):
email = forms.EmailField(widget=forms.TextInput(
    attrs={"class": "input_text", }), required=True,)
username = forms.CharField(max_length=20, widget=forms.TextInput(
    attrs={"class": "input_text", }), required=True,)
password1 = SetPasswordField()
password2 = PasswordField()
first_name = forms.CharField(max_length=20, widget=forms.TextInput(
    attrs={"class": "input_text", }), required=True,)
last_name = forms.CharField(max_length=30, widget=forms.TextInput(
    attrs={"class": "input_text", }), required=True,)
bdate = forms.DateField( widget=forms.TextInput(
    attrs={"id": "date", "type": "date" }), required=True, )
phone = forms.CharField(max_length=30, widget=forms.TextInput(
    attrs={"class": "input_text",  }) , required=True,)
photo = forms.ImageField(required=False,)

class Meta:
    model = Profile
    exclude = [" "]


def signup(self, request, user):
    user.username = self.cleaned_data['username']
    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']
    user.bdate = self.cleaned_data['bdate']
    user.photo = self.cleaned_data['photo']
    user.phone = self.cleaned_data['phone']
    user.save()

Я, конечно, указал ACCOUNT_SIGNUP_FORM_CLASS в settings.py, чтобы указать на эту форму, и она отображает поля, которые я в нее вставил.В установленных мной настройках:

AUTH_USER_MODEL = 'lk.Profile'
ACCOUNT_SIGNUP_FORM_CLASS = 'cabin.forms.SignupForm'
ACCOUNT_ADAPTER = 'lk.adapter.AccountAdapter'

Как получить изображение для загрузки на сервер при регистрации пользователя?

1 Ответ

0 голосов
/ 06 июня 2018

В шаблоне signup.html, который использует allauth, не было

enctype="multipart/form-data"

Решение, найденное здесь: Добавление FileField в пользовательскую RegistrationForm с помощью django-allauth

...