Django: как обновить один объект

#python #django #object #view

#python #django #объект #Вид

Вопрос:

Итак, у меня есть этот веб-сайт календаря, на который пользователь может добавлять события. Они могут создать новое событие для добавления в календарь или редактировать текущие события, которые они уже добавили в календарь. Однако, когда они редактируют уже добавленное событие и нажимают кнопку отправки, чтобы опубликовать его, создается совершенно новое событие вместо редактирования текущего. Я пытаюсь добиться того, чтобы при редактировании добавленного события вместо создания нового события при отправке оно редактировало текущее, на которое они нажали в первую очередь.

views.py

 def event(request, event_id=None):

    if event_id:
        instance = get_object_or_404(Event, pk=event_id)
        print(instance)
    else:
        instance = Event()

    form = EventForm(request.POST or None, instance=instance)
    
    if request.POST and form.is_valid():
        event = Event.objects.create(**form.cleaned_data, user=request.user)
        return HttpResponseRedirect(reverse('cal:calendar'))
    return render(request, 'cal/event.html', {'form': form})
 

Ответ №1:

Вы не должны использовать Event.objects.create . EventForm — это ModelForm, поскольку вы переходите instance к нему; таким образом, вы можете вызвать его save метод.

 if form.is_valid():
    event = form.save(commit=False)
    event.user=request.user
    event.save()
    return HttpResponseRedirect(reverse('cal:calendar'))