Django ModelForm,不保存数据

Django ModelForm, not saving data

我正在使用 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>

A​​ FormView 保存表格。可以重写 .form_valid(…) 方法以指定在表单有效时要执行的操作。在这里使用 CreateView [Django-doc] 更有意义,它将保存表单并将数据存储到数据库中:

from django.views.generic import <strong>CreateView</strong>

class EventFormView(LoginRequiredMixin<strong>, CreateView</strong>):
    template_name = "events/event_form.html"
    form_class = EventCreateForm
    model = Event
    success_url = reverse_lazy("dashboard:events:home")