Django 1.11 CreateView 传递 URL 参数

Posted

技术标签:

【中文标题】Django 1.11 CreateView 传递 URL 参数【英文标题】:Django 1.11 CreateView pass URL parameters 【发布时间】:2018-04-04 16:19:59 【问题描述】:

我正在使用 Django 1.11,我很难理解如何使用 CreateView 类将 URL 参数传递给 ModelForm。我在 URL 中有 4 个参数(start_date、end_date、start_time、end_time),我试图将它们传递给表单中的相关字段。如果有人能指出正确的方向来解决这个问题,我将不胜感激!

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

这就是我卡住的地方。在 *** 上呆了几天,在谷歌上搜索,并尝试了很多事情,我相信解决方案涉及 views.py 中的 get_form_kwargsget_context_dataform_valid 但有可能我只是混淆了自己试图解决这个问题.任何能让我走上正轨的帮助都将不胜感激!

【问题讨论】:

您不必做任何事情,CreateView 应该会自动处理它们。你遇到了什么问题? 嗨,塞尔丘克,感谢您的回复。问题是我想将 4 个 URL 参数传递给表单,但表单只是加载了这些字段中没有值。例如,在提供的屏幕截图中,start_date 字段将默认为 25/10/2017,使用示例 URL 【参考方案1】:
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

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

【讨论】:

非常感谢Ykh!我已经坚持了好几天了。我非常感谢您对我的帮助。使用您的代码,两个日期字段现在可以正确预填充,但时间字段不是。这只是我需要解决的格式问题吗?我注意到 URL 在时间数字和 AM/PM 指示符之间有 %20 的空格。为清楚起见,如果我手动填写表单中的时间字段,我将使用 URL 时间中的示例选择下午 4:00。 确实是格式问题。我将我的 URL 生成更改为:start_time="+start.format("kk:mm") 现在可以使用了。再次感谢您! 这是我的荣幸

以上是关于Django 1.11 CreateView 传递 URL 参数的主要内容,如果未能解决你的问题,请参考以下文章

如何从模型 A 的 CreateView 重定向到模型 B 的另一个 CreateView,同时将关键信息从模型 A 传递到下一个视图?

没有用户输入的 Django CreateView 定义字段

在 Django 1.5 中结合 CreateView 和 DetailView

django 信号 目录 1.11

Django - 如何使用CreateView扩展自定义用户

Django - CreateView 不使用嵌套表单集保存表单