Django ModelForm, не сохраняет данные

Я использую ModelForm для создания формы, затем я использую эту форму для создания нового экземпляра в базе данных. Но форма не сохраняет данные, она просто перезагружает страницу при подстановке формы.

Я также загружаю изображение.

forms.py

from django import forms
from django_summernote.widgets import SummernoteWidget

from events.models import Event


class EventCreateForm(forms.ModelForm):
    class Meta:
        model = Event
        fields = "__all__"
        widgets = {
            "content": SummernoteWidget(),
        }

    def __init__(self, *args, **kwargs):
        super(EventCreateForm, self).__init__(*args, **kwargs)
        for visible in self.visible_fields():
            visible.field.widget.attrs["class"] = "form-control"

        self.fields["start_datetime"].widget.attrs["class"] += " datetimepicker"
        self.fields["finish_datetime"].widget.attrs["class"] += " datetimepicker"
        self.fields["image"].widget.attrs["class"] = "custom-file-input"
        self.fields["address"].widget.attrs["rows"] = 3

views.py

from django.urls import reverse_lazy
from django.views.generic import ListView
from django.views.generic.edit import FormView
from django.contrib.auth.mixins import LoginRequiredMixin

from events.models import Event
from events.forms import EventCreateForm


class EventListView(LoginRequiredMixin, ListView):
    model = Event
    context_object_name = "events"


class EventFormView(LoginRequiredMixin, FormView):
    template_name = "events/event_form.html"
    form_class = EventCreateForm
    success_url = reverse_lazy("dashboard:events:home")

event_form.html

<form action="" method="post" enctype="multipart/form-data">
            {% csrf_token %}          

            <div class="card-body">
              <div class="form-group">
                <label>Title</label>
                {{ form.title }}
              </div>
              <div class="row">
                <div class="col-sm-4">                  
                  <div class="form-group">
                    <label>Start Date and Time</label>
                      {{ form.start_datetime }}                                
                  </div>
                </div>

                <div class="col-sm-4">
                  <div class="form-group">
                    <label>Finish Date and Time</label>
                      {{ form.finish_datetime }} 
                  </div>
                </div>
                
                <div class="col-sm-4">
                  <div class="form-group">
                    <label for="exampleInputFile">Image</label>
                    <div class="input-group">
                      <div class="custom-file">
                        {{ form.image }}
                        <label class="custom-file-label">Choose file</label>
                      </div>                     
                    </div>
                  </div>
                </div>
              </div>              
              <div class="form-group">
                <label>Address</label>
                {{ form.address }}
              </div>              
              <div class="form-group">
                <label>Content</label>
                {{ form.content }}
              </div>              
            </div>
            <!-- /.card-body -->
            
            <div class="card-footer">
              <button type="submit" class="btn btn-primary">Publish</button>
              <a href="#" class="btn btn-default float-right">Cancel</a>
            </div>
          </form>

А FormView делает не сохранение формы. Метод .form_valid(…) может быть переопределен, чтобы указать, что делать в случае, если форма действительна. Здесь имеет смысл использовать CreateView [Django-doc], который сохранит форму и тем самым сохранит данные в базу данных:

from django.views.generic import CreateView

class EventFormView(LoginRequiredMixin, CreateView):
    template_name = "events/event_form.html"
    form_class = EventCreateForm
    model = Event
    success_url = reverse_lazy("dashboard:events:home")
Вернуться на верх