У пользователя есть форма, в которой он может сохранять конфиденциальные данные.Я могу зашифровать эти данные и сохранить их в базе данных, используя формы моделей.Однако, если пользователь хочет изменить эти данные, они появляются в TextInput из формы.
Я прочитал этот пост , а этот .Ответ, кажется, там, но я не могу преуспеть в реализации.Вот что у меня есть:
Модели
class CustomUser(AbstractUser):
api_key = models.CharField(max_length=256, default='null')
Формы
class APIForm(forms.ModelForm):
class Meta:
model = CustomUser
fields = ('api_key')
widgets = {
'api_key': TextInput(attrs={'size': 10, 'placeholder': 'Your key'}),
}
HTML
<form method="post">
{% csrf_token %}
{{ form|crispy }}
<button type="submit">Save changes</button>
</form>
Похоже, что форма не определяет виджет, поскольку, если я изменю значение размера атрибута, форма не изменится.
Я что-то упустил?
Заранее спасибо
ОБНОВЛЕНИЕ.
Вот мой упрощенный код вида:
Просмотров
class KeyView(LoginRequiredMixin, UpdateView):
model = CustomUser
form_class = APIForm
template_name = 'account/api_form.html'
success_url = reverse_lazy('pages:home')
def get_object(self):
return self.request.user
def form_valid(self, form):
self.object = form.save(commit=False)
key=botcrypt.encrypt_val(self.object.api_key)
self.object.api_key =key.decode("utf-8")
self.object.save()
messages.success(self.request, 'key updated with success!')
return super().form_valid(form)
Я использую allauth для учетных записей, на случай, если эта информация важна