pythondjangodjango-generic-views

Problems with edit button in Django


i'm novice and just trying Django functionality. I create button to edit value in db in Django, but it doesn't work write. Problem in that: when i press the button (from notes.html), it's redirect to page edit_note.html, but values in fields is empty. When i manually press adress in browser, it work's normally. I don't understand where i maked mistake.

in views.py:

class EditNoteView(UpdateView):
model = Notes
form_class = NotesForm
template_name = 'notes/edit_notes.html'
context_object_name = 'note'

def get_success_url(self):
    return reverse_lazy('edit_note', kwargs={'pk': self.object.pk})

in urls.py:

urlpatterns = [
path('', home, name='home'),
path('notes/', NoteView.as_view(), name='notes'),
path('<int:pk>/edit', EditNoteView.as_view(), name='edit_note'),

in notes.html:

{% for i in all_notes %}
    <tr>
    <td>{{ i.notes_category }}</td>
    <td>{{ i.title }}</td>
    <td>{{ i.text }}</td>
    <td>{{ i.reminder_data_time }}</td>
    <td>
        <form action="{% url 'edit_note' i.id %}" method="post">
            {% csrf_token %}
            <div class="btn-small-group">
                <button type="submit">Edit</button>
            </div>
        </form>

    </td>
    <td>
        <div class="btn-small-group">
            <button type="submit">Delete</button>
        </div>
    </td>
{% endfor %}

in edit_notes.html:

<form action="{% url 'edit_note' note.id %}" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <div class="btn-small-group">
        <button type="submit">Edit</button>
    </div>

</form>

after press in notes.html on button "edit"

enter press adress in browser


Solution

  • The problem is the method you are using to access the edit form. You are using the POST method instead of a GET method. This make Django want to save the edited object instead of displaying the edit form. You should get some validation errors.

    Solution

    Change the request method to a GET method Or use an anchor tag as below

    <a href="{% url 'edit_note' note.id %}">Edit</a>