При попытке добавить ссылку к метке поля формы возникает ошибка __init __ () получил неожиданный аргумент ключевого слова 'initial'
Когда я пытаюсь добавить ссылку в метку поля UserCreationForm, я получаю ошибку __init __ () got an unexpected keyword argument 'initial'. Мой код выглядит следующим образом:
#forms.py
class RegisterUserForm(UserCreationForm):
email = forms.EmailField(required=True, label='Адрес электронной почты')
check = forms.BooleanField()
def __init__(self):
super(RegisterUserForm, self).__init__()
self.fields['check'].label = 'Принимаю политику конфиденциальности' % reverse('user:privacy')
class Meta:
model = AdvUser
fields = ('username', 'email', 'password1', 'password2', 'check')
views.py выглядит следующим образом:
#views.py
class RegisterUserView(SuccessMessageMixin, CreateView):
model = AdvUser
template_name = 'users/register_user.html'
form_class = RegisterUserForm
success_url = reverse_lazy('articles:list_view')
success_message = 'Вы успешно зарегистрировались!'
def form_valid(self, form):
valid = super(RegisterUserView, self).form_valid(form)
username, password = form.cleaned_data.get('username'), form.cleaned_data.get('password1')
new_user = authenticate(username=username, password=password)
login(self.request, new_user)
return valid
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# 5 тегов с наибольшим количеством публикаций
context['tags_list'] = Tag.objects.annotate(articles_quantiy=Count('taggit_taggeditem_items')).order_by(
'-articles_quantiy')[:10]
context['securities_types_list'] = StocksETFsBonds.objects.all()
return context
Как я могу решить эту проблему?
Эта ошибка вызвана тем, что __init__
теперь не принимает ни args
, ни kwargs
:
def __init__(self): # Not expecting anything
Необходимо сохранить args
и kwargs
, поэтому просто измените его на:
class RegisterUserForm(UserCreationForm):
...
def __init__(self, *args, **kwargs): # Add back args and kwargs
super(RegisterUserForm, self).__init__(*args, **kwargs) # And pass to parent
Когда я изменил def __init__
на приведенный ниже код, на странице регистрации появилась правильная ссылка:
def __init__(self, *args, **kwargs):
super(RegisterUserForm, self).__init__(*args, **kwargs)
self.fields['check'].label = mark_safe('Принимаю <a href=%s> политику конфиденциальности</a>' % reverse_lazy('users:privacy'))