Установка начального значения поля формы из данных контекста в представлении на основе классов Django
У меня есть URL-адрес активации с ключом активации ( /user/activ /123123123). Это работает без каких-либо проблем. get_context_data может добавить его в шаблон. То, что я хочу сделать, это иметь его в качестве начального значения для ключевого поля, так что пользователю нужно только ввести имя пользователя и пароль, созданные при регистрации.
Как я могу вытащить ключ из контекста или получить () без жесткого кодирования поля в шаблоне?
class ActivateView(FormView):
template_name = 'activate.html'
form_class = ActivationForm
#initial={'key': '123123123'} <-- this works, but is useless
success_url = 'profile'
def get_context_data(self, **kwargs):
if 'activation_key' in self.kwargs:
context = super(ActivateView, self).get_context_data(**kwargs)
context['activation_key'] = self.kwargs['activation_key']
"""
This is what I would expect to set the value for me. But it doesn't seem to work.
The above context works fine, but then I would have to manually build the
form in the template which is very unDjango.
"""
self.initial['key'] = self.kwargs['activation_key']
return context
else:
return super(ActivateView, self).get_context_data(**kwargs)
1 ответ
Решение
Вы можете переопределить get_initial
предоставить динамические начальные аргументы:
class ActivationView(FormView):
# ...
def get_initial(self):
return {'key': self.kwargs['activation_key']}