Django формы: Как установить начальное значение поля, то значение, которое оно в данный момент содержит в базе данных

я хочу, чтобы пользователь мог видеть текущее значение поля, одновременно отправляя другое значение

forms.py:

class CustomerInfoForm(forms.Form):

    first_name = forms.CharField(
        label="Firstname",
        widget=widgets.TextInput(),
        required=False,
    )
    last_name = forms.CharField(
        label="Lastname",
        widget=widgets.TextInput(),
        required=False,
    )

views.py: (аутентификация по номеру телефона)

@login_required
def customer_panel_info_view(request):
    info_form = CustomerInfoForm(request.POST or None)
    if request.user.is_authenticated:
        user_phone_number = request.user.phone_number
    if info_form.is_valid():
        first_name = info_form.cleaned_data.get("first_name")
        last_name = info_form.cleaned_data.get("last_name")
        customer = User.objects.get(phone_number=user_phone_number)
        customer.first_name = first_name
        customer.last_name = last_name
        customer.save()

    context = {
        "info_form": info_form,
    }

    return render(request, "panel/info.html", context)

шаблон:

<form action="" method="post">
    {% csrf_token %}
    {% info_form %}
    <button type="submit" class="btn btn-success">submit</button>
</form>

вот поток: пользователь заходит в эту форму и хочет добавить, изменить или удалить часть информации (это часть всего шаблона. фактически она содержит пол дату рождения и другие вещи). Я хочу, чтобы поля имели текущее значение, чтобы пользователь знал, какие поля уже имеют значение

Я рекомендую вам использовать класс ModelForm https://docs.djangoproject.com/en/3.2/topics/forms/modelforms/

Что касается метода customer_panel_info_view, вы используете декоратор login_required, поэтому пользователь всегда аутентифицируется.

Если вы хотите избежать ModelForm, вы можете добиться этого с помощью параметра initial.

@login_required
def customer_panel_info_view(request):
    initial = {"first_name": request.user.first_name, "last_name": request.user.last_name})

    info_form = CustomerInfoForm(request.POST) if request.method == "POST" else CustomerInfoForm(initial=initial)
    if info_form.is_valid():
        first_name = info_form.cleaned_data.get("first_name")
        last_name = info_form.cleaned_data.get("last_name")
        
        request.user.first_name = first_name
        request.user.last_name = last_name
        request.user.save()

    context = {
        "info_form": info_form,
    }

    return render(request, "panel/info.html", context)

Обратите внимание, я также удалил логику, которая перезагружала пользователя. Если вы используете login_required, пользователь всегда будет аутентифицирован.

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