在我的createview网址中,我希望有一个'?',从那里我可以将参数传递给nect页面。我正在使用基于类的视图。例如:
www.site.com/appname/appointment/add/?Name=1
我的HTML将是:
href={% url 'People:appointment-create' Patient.id %}
目前我的网址是这样的:
re_path(r'appointment/add/$', views.appointmentCreate.as_view(), name='appointment-create'),
我的观点是:
class appointmentCreate(LoginRequiredMixin, CreateView):
model = appointment
form_class = AppointmentForm
def get_initial(self):
patient = self.request.GET.get('patient')
return {
'Patient': patient,
}
我将如何做到这一点?
答案 0 :(得分:2)
您可以尝试这样的事情:
href={% url 'People:appointment-create' %}?patient_id={{ Patient.id }}
(所以只需在url之后传递查询参数)。
此外,如果您想要针对此问题提供更通用的解决方案(从查询参数自动生成表单的初始值),请参阅有关CBV的文章中的https://spapas.github.io/#configure-the-form-s-initial-values-from-get-parameters部分。
答案 1 :(得分:1)
所以这是基础知识:
首先,我想告诉您刚才写的以下内容:
{% url 'People:appointment-create' Patient.id %}
要匹配上面的网址,您需要包含以下网址:
path(r'appointment/add/<int:patient>', views.appointmentCreate.as_view(), name='appointment-create'),
这是请求参数和kwargs之间的区别,您将患者ID作为kwargs传递,并在self.kwargs
构建的网址如下所示:
www.site.com/appname/appointment/add/1/
接下来就是如果你想发布请求参数(不需要在你的urls.py中添加任何额外的url),你可以使用如下:
href="{% url 'People:appointment-create' %}?patient={{Patient.id}}"
请注意,如果您在请求参数中使用名称,则此处使用的参数将在视图中可用,然后您需要将其作为self.request.GET.get('name')
访问,如果您想将患者用作请求参数,则可以将其作为self.request.GET.get('patient')
。