Как можно использовать 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>