Добавление 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 по умолчанию.