【发布时间】:2018-08-01 08:53:39
【问题描述】:
大图:我希望我在 get_absolute_url(见下文)中的反向方法返回一个在末尾附加查询参数的 url,例如<url>?foo=bar。此外,我希望 bar 由触发 get_absolute_url 调用的 POST 请求指定,可以作为表单的输入(但不是模型表示的字段,是临时的)或 url 查询参数。我可以使用任何一种方法在我的视图中轻松访问bar,但我似乎无法弄清楚如何在我的模型中访问它。
这里的动机是我的详细信息页面使用 javascript 将模型中的字段拆分为不同的选项卡(想想https://www.w3schools.com/howto/howto_js_tabs.asp)。当用户更新模型时,他们选择他们想要更新的选项卡,然后更新模板只呈现模型中与该选项卡相关的字段。更重要的是,用户提交更新后,我希望详情页知道打开用户刚刚编辑的特定标签。
(如果字段是模型的一部分,我了解它是如何工作的;在get_absolute_url with parameters 中,解决方案非常简单,涉及使用self.id。但在我的情况下,bar 不是模型,我不知道如何访问它)
一些细节:我的项目中有一个名为 Context 的模型。我使用名为 ContextForm 的模型表单和名为 ContextUpdate 的通用 UpdateView 为模型实现了通用 DetailView 和更新页面。提交表单后,我在 models.py 中使用 get_absolute_url 重定向到详细信息页面:
def get_absolute_url(self):
return reverse("context:review",kwargs={"slug": self.slug})
我在 urls.py 中的 urlpatterns 看起来像:
urlpatterns = [
url(r'^(?P<slug>[-\w]+)$',views.ContextDetail.as_view(),name="review"),
url(r'^(?P<slug>[\w]+)/edit$',views.ContextUpdate.as_view(),name="edit"),
]
我可以很容易地在我的 UpdateView 中访问这个参数:
def post(self,request,**kwargs):
print (request.POST.get("bar")) #accessing input to form
print (request.GET.get("bar")) #accesssing url parameter
return super().post(request,**kwargs)
但是当在模型内部调用get_absolute_url 时,我似乎无法再访问它了。
关于如何完成此任务的任何建议?我想使用 get_absolute_url (连同模型表单、通用视图等),以便我可以遵循 Django 约定,但似乎使用 get_absolute_url 使我想要实现的功能变得困难。如果在 POST 请求之后重定向到详细视图发生在我的视图中,那么我会知道如何解决这个问题(我认为)。任何想法或想法将不胜感激!
【问题讨论】:
标签: django django-views url-parameters modelform django-generic-views