Django 1.11 CreateView 传递 URL 参数

Django 1.11 CreateView pass URL parameters

我正在使用 Django 1.11,我正在努力了解如何使用 CreateView Class 将 URL 参数传递给 ModelForm。我在 URL(start_date、end_date、start_time、end_time)中有 4 个参数,我试图将它们传递给表单中的相关字段.如果有人能指出正确的方向以找出解决此问题的方法,我将不胜感激!

URL 是在我的 html 文件中使用以下函数创建的:

window.location.assign("/calendar/create?start_date="+start.format("YYYY-MM-DD")+"&end_date="+end.format("YYYY-MM-DD")+"start_time="+start.format("h:mm A")+"&end_time="+end.format("h:mm A"));

这从 urls.py 打开:

url(r'^calendar/create',views.CalendarCreate.as_view(),name='calendar_create'),

来自 views.py:

class CalendarCreate(CreateView):
    model = Event
    form_class = EventForm

来自 forms.py:

class EventForm(ModelForm):

    class Meta:
        model = Event

到目前为止一切顺利,我的 event_form.html 以以下形式打开:

生成的示例 URL 是: http://127.0.0.1:8000/calendar/create?start_date=2017-10-25&end_date=2017-10-25start_time=4:00%20PM&end_time=5:00%20PM

这就是我卡住的地方。通过在 Whosebug、谷歌搜索和尝试许多事情上花了几天时间,我相信解决方案涉及 get_form_kwargsget_context_dataform_valid in views.py 但我有可能只是困惑自己试图解决这个问题。任何帮助我走上正轨的帮助将不胜感激!

class CalendarCreate(CreateView):
    model = Event
    form_class = EventForm

    def get_initial(self):
        initial = {}
        for x in self.request.GET:
            initial[x] = self.request.GET[x]
        print(initial)
        return initial

注意如果 'start_date'request.GET 你必须在你的 Event 模型中有相同的字段 'start_date',并且注意时间格式是有效的。