Django: Моя попытка обновить экземпляр вместо этого создает новый экземпляр

Я почти уверен, что я неправильно понимаю что-то очевидное, но я разобрал код до самых основ и по какой-то причине не могу найти проблему. Это действительно работало в предыдущей итерации (следуя советам из других сообщений S/O), но, очевидно, я что-то сломал при редактировании кода в какой-то момент.

Примечание: я удалил код, который кажется лишним для этой темы.

Ожидаемое поведение/с:

  • Если пользователь выбирает кнопку "Edit" на странице index.html, он попадает на страницу edit_booking.html, где форма CustomerForm заполняется выбранным экземпляром клиента. (Это похоже работает как ожидалось. Я думаю, что, возможно, это ошибка в моей ментальной модели, но я не уверен, что именно.)

  • Если пользователь нажимает кнопку "Сохранить" на странице edit_booking.html, выбранный экземпляр Customer обновляется/заменяется тем, что пользователь ввел (или уже ввел) в форму. (Это работает не так, как ожидалось. Вместо этого, когда пользователь выбирает кнопку "Сохранить", создается новый экземпляр Customer из содержимого формы edit_booking.html.)

Что я пробовал:

  • Я заменил передачу переменной customer в views.edit_customer (и edit_customer.html) на просто customer_id (т.е. "customer_id": customer_id), но это не помогло. То есть я не думал, что это будет работать, но я в растерянности!
  • Я заменил "customer = form.save()" на "customer = form.save(commit=False) / customer.save()". Это не дало никакого видимого эффекта.
  • Я удалил "customer = form.save()" и отредактировал поля по отдельности (например, "customer.first_name = 'Buster'", затем "customer.save()"). Это работает, казалось бы, идеально. Но это кажется слишком сложным; как я уже говорил, я уверен, что существует более простой способ обновления экземпляров, который работал раньше. Возможно, я неправильно помню.

Сообщения об ошибках: N/A

Мои вопросы:

  • Почему это не работает?
  • Как я могу это исправить?

--

index.html

<form action="{% url 'edit_customer' customer_id=customer.id %}" method="post">
    {% csrf_token %}
    {{ customer }}
    <input type="submit" name="query" value="Edit">
</form>

edit_customer.html

<form action="{% url 'edit_customer' customer_id=customer.id %}" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" name="query" value="Save">
</form>

urls.py

urlpatterns = [
    path('edit_customer/<customer_id>', views.edit_customer, name="edit_customer"),
]

views.py

def edit_customer(request, customer_id):

    if request.method == "POST":
        customer = Customer.objects.get(pk=customer_id)
        query = request.POST.get("query")

        if query == "Edit":
            return render(request, "appname/edit_customer.html", {
                "customer": customer,
                "form": CustomerForm(instance=customer)
            })

        if query == "Save":
            form = CustomerForm(request.POST)
            if form.is_valid():
                customer = form.save()
                return HttpResponseRedirect(reverse("index"))
Вернуться на верх