Django CreateView无法创建模型对象

时间:2018-12-04 06:32:02

标签: django django-models django-templates

我在模型对象上使用Django CreateView。表单被渲染,但是在提交“发布”按钮时,没有任何反应。在控制台中,我收到代码200(成功),但是未创建对象。另外,我对Update View使用相同的HTML模板和相同的代码,并且运行良好。请帮忙。

class EventCreateView(LoginRequiredMixin, CreateView):
    model = Event
    fields = ['name', 'event_attendees']

    def form_valid(self, form):
        form.instance.creator = self.request.user
        return super().form_valid(form)

型号

name = models.CharField(max_length=100)
date = models.DateTimeField(default=timezone.now)
location = models.CharField(max_length=16, choices=EVENT_VENUES, default='sec-1, noida')
event_attendees = models.FileField(upload_to='documents/', default='')
creator = models.ForeignKey(User, on_delete=models.CASCADE)
form_rollout_time = models.DateTimeField(default=timezone.now)

def __str__(self):
    return self.name

def get_absolute_url(self):
    return reverse('event-detail', kwargs={'pk': self.pk})

HTML模板

{% extends "events/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">New Event</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Post</button>
            </div>
        </form>
    </div>
{% endblock content %}

网址

urlpatterns = [
    path('', EventListView.as_view(), name='event-home'),
    path('user/<str:username>', UserEventListView.as_view(), name='user-events'),
    path('event/<int:pk>/', EventDetailView.as_view(), name='event-detail'),
    path('event/new/', EventCreateView.as_view(), name='event-create'),
    path('event/<int:pk>/update/', EventUpdateView.as_view(), name='event-update'),
    path('event/<int:pk>/delete/', EventDeleteView.as_view(), name='event-delete')
]

2 个答案:

答案 0 :(得分:0)

更新这样的代码

def form_valid(self, form):
    obj = form.save(commit=False)
    obj.creator = self.request.user
    obj.save()

尝试

答案 1 :(得分:0)

通过覆盖方法form_invalid()解决了该问题。显然,问题出在FileField的实现中,但默认的form_invalid实现已解决了该问题。在覆盖该方法时,出现了实际问题。