Django 1.11 CreateView传递URL参数

时间:2017-10-24 01:33:18

标签: django django-forms django-class-based-views

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

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

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以以下形式打开: form

并生成示例网址: 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

这是我被困的地方。从这里花费了很多天在stackoverflow,谷歌搜索和尝试了很多事情我相信解决方案涉及get_form_kwargs中的get_context_dataform_validviews.py但我有可能只是混淆了自己试图解决这个问题。任何有助于我走上正确轨道的帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

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 'start_date'Event模型中的TF_VAR字段是否TF_VAR,并注意时间格式为vaild。

答案 1 :(得分:-1)

也许您需要Meta类中的fields属性?

来自doc - https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/

# Create the form class.
class ArticleForm(ModelForm):
    class Meta:
        model = Article
        fields = ['pub_date', 'headline', 'content', 'reporter']