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

У меня есть следующий пользовательский RegistrationForm (упрощенный, отлично работает без my_file):

class SignupForm(forms.Form):
    home_phone = forms.CharField(validators=[phone_regex], max_length=15)
    my_file = forms.FileField()

    def signup(self, request, user):
        new_user = ReqInfo(
            user=user,
            home_phone=self.cleaned_data['home_phone'],
            my_file=my_file,
        )
        new_user.save()

В models.py:

class ReqInfo(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True)
    home_phone = models.CharField(
        validators=[phone_regex], max_length=15)
    my_file = models.FileField(upload_to='uploads/directory/', validators=[resume_file_validator], blank=True, null=True)

Моя проблема:

Когда я добавляю пользователя в myurl/accounts/signup, он говорит мне, что поле my_file является Обязательным, хотя я выбираю файл.

2 ответа

Решение

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

enctype="multipart/form-data"

После добавления он работает как шарм.

Вы также можете использовать сигналы Django для созданияpost_saveсигнал, сообщающий о сохранении нового пользователя вUserмодель.
По сигналу вы можете создать свойReqInfoэкземпляр и сохраните его.

  • Переопределить модель пользователя, заданную Django, чтобы включить 2 новых поля.file_inputи .
  • Переопределить аллаутSignupFormвключитьFilefieldдля ввода файла и CharField для вашегоhome_phoneполе.
  • Не забудьте импортировать файл сигналов в функцию готовности вашегоAppConfigвapps.py, иначе ваши сигналы не будут работать!

Но этот метод требует изменения модели пользователя Django по умолчанию.

Другие вопросы по тегам