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")