我正在尝试实现一个预约应用程序,用户可以在其中创建与预先存在的课程关联的会话。我想做的是使用 django CreateView 创建会话,而不询问用户关联的类,同时在后台为会话分配一个类。我尝试通过在 url 中传递类的 pk 来实现此目的,以便我可以在 CreateView 中查找该类并将该类分配给会话。
我不知道到底该怎么做。我猜测在模板中我希望在类的 DetailView 中包含类似
<a href="{% url create_sessions %}?class={{ object.pk }}>Create Session</a>
的内容,并在 urls.py 文件中包含包含以下行的 url
url(r'^create-sessions?class=(\d+)/$', CreateSessionsView.as_view(), name = 'create_sessions')
,但我对 django 还很陌生,不太明白这个参数发送到我的 CBV(基于类的视图)的位置以及如何使用它。
我将课程保存到会话中的计划是重写 CBV 中的
form_valid
为:
def form_valid(self, form):
form.instance.event = event
return super(CreateSessionsView, self).form_valid(form)
如果这明显不正确,也请告诉我。
谢谢!
GET 参数(?后面的参数)不是 URL 的一部分,并且在 urls.py 中不匹配:您可以从
request.GET
字典中获取该参数。但最好将该参数作为 URL 本身的一部分,因此其格式为“/create-sessions/1/”。
所以 urlconf 将是:
url(r'^create-sessions/(?P<class>\d+)/$', CreateSessionsView.as_view(), name='create_sessions')
现在链接可以是:
<a href="{% url create_sessions class=object.pk %}">Create Session</a>
现在在 form_valid 中你可以这样做:
event = Event.objects.get(pk=self.kwargs['class'])
url.py
path('submit/request/<str:tracking_id>', OrderCancellationRequest.as_view(), name="cancel_my_order"),
模板
<form method="POST">
{% csrf_token %}
{{form | crispy}}
<button class="btn" type="submit">Submit</button>
</form>
查看
class MyView(CreateView):
template_name = 'submit_request.html'
form_class = MyForm
model = MyModel
def form_valid(self, form, **kwargs):
self.object = form.save(commit=False)
self.object.created_at = datetime.datetime.now()
self.object.created_for = self.kwargs.get('order_id')
self.object.submitted_by = self.request.user.email
super(MyView, self).form_valid(form)
return HttpResponse("iam submitted")
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['header_text'] = "My Form"
context['tracking_id'] = self.kwargs.get('order_id')
return context