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_kwargs
或 get_context_data
或 form_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