Как можно использовать Create() и Update() в одной и той же HTML-странице Django?

Я пытаюсь создать страницу, на которой я могу создать новую запись/примечание в списке, а также обновить существующий список на одной HTML-странице. Проблема в том, что create() не требует первичного ключа. Однако update() требует наличия первичного ключа. Как я могу сделать это в django? Создать ли мне новую функцию в views.py? Пример:

def new_note(request, note_id=None):
    if note_id == None:
        notes(request) #function that just uses create()
    else:
        note_sad(request, note_id) #sad=save and delete using update() and delete()

views.py sample function for entering notes:
def notes(request):
    if request.method == 'GET':
        notes = Note.objects.all().order_by('note_id')
        form = NoteForm()
        return render(request=request,
                      template_name='notes.html',
                      context={
                          'notes': notes,
                          'form': form
                      })

    # when user submits form
    if request.method == 'POST':
        form = NoteForm(request.POST)
        if form.is_valid():
            note = form.cleaned_data['note']
            Note.objects.create(note=note)
        # "redirect" to the todo homepage
        return HttpResponseRedirect(reverse('new_note'))

views.py function for creating a new entry/note:

def note_sad(request, note_id):
    if request.method == 'GET':
        note = Note.objects.get(pk=note_id)
        form = NoteForm(initial={'note_text': note.note_text})
        return render(request=request,
                      template_name='notes.html',
                      context={
                          'form': form,
                          'note_id': note_id
                      })

    if request.method == 'POST':
        if 'save' in request.POST:
            form = NoteForm(request.POST)
            if form.is_valid():
                note = form.cleaned_data['note']
            Note.objects.filter(pk=note_id).update(note_text=note)
        elif 'delete' in request.POST:
            Note.objects.filter(pk=note_id).delete()
        return HttpResponseRedirect(reverse('new_note'))

Существует много способов передать ID в note_sad для обновления объекта. Один из способов - отобразить элементы на HTML и добавить Id для каждой кнопки отправки следующим образом:

{% for note in notes %}
    <input type='submit' value='{{note.pk}}' name='pk'>
{% end for %}

Альтернативно, вы можете добавить Id в форму следующим образом:

<form method = "post" action="{% url 'note_sad' note.pk %}">

{% csrf_token %}
       
</form>
Вернуться на верх