django-allauth自定义注册表单。如何使用图片uploadI(图片字段)添加字段?

时间:2018-06-03 12:25:15

标签: python django django-allauth allauth

我正在使用Django和Allauth。我需要用户在注册时能够上传照片。目前表单有效,但所选照片无法加载

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()

我当然在settings.py中指定了ACCOUNT_SIGNUP_FORM_CLASS来指向此表单,它会显示我放入的字段。 在我安装的设置中:

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

如何在用户注册时将图像上传到服务器?

1 个答案:

答案 0 :(得分:0)

signup.html模板allauth使用didnt has

enctype="multipart/form-data"

此处找到解决方案:Adding a FileField to a custom SignupForm with django-allauth