Как заполнить 'начальное значение' в формах Django текущими данными пользователя?
Я пошел дальше и создал форму для обновления записи в базе данных пользователей.
class UserUpdateForm(forms.ModelForm):
class Meta:
model = User
fields = ("username", "first_name", "last_name", "email")
Но когда я отображаю форму, все поля ввода оказываются пустыми. Как мне заполнить их данными пользователя, например, текущим именем пользователя и электронной почтой?
Я использую Bootstrap 5 для стилизации, но это должно иметь значение:
<div class="mb-3">
<label for="{{ form.first_name.id_for_label }}" class="form-label">{{ form.first_name.label }}</label>
{{ form.first_name|addcss:"form-control"}}
</div>
Проблема в том, что я делаю поле ввода с помощью шаблонизатора Django и не указываю его самостоятельно. Моя идея заключалась в том, чтобы соединить фильтры шаблонов в цепочку:
<div class="mb-3">
<label for="{{ form.username.id_for_label }}" class="form-label">{{ form.username.label }}</label>
{{ form.username|addcss:"form-control"|addplaceholder:user.username}}
</div>
Но это не сработало, потому что первый фильтр преобразует его в виджет:
@register.filter(name="addcss")
def addcss(field, css):
return field.as_widget(attrs={"class": css})
Может быть, вы можете порекомендовать мне способ модификации этого фильтра или предложить совершенно другой подход.
При создании формы внутри представления можно указать экземпляр:
form = UserUpdateForm(instance=user_instance)
При отображении этой формы в шаблоне в ней будут отображаться значения из user_instance.
Вы также можете указать словарь initial для формы, но это обычно полезно только для пустых форм.
form = UserUpdateForm(instance=request.user)
вы должны установить данные init.