Как заполнить 'начальное значение' в формах 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.

Вернуться на верх