【发布时间】:2015-01-09 21:36:03
【问题描述】:
我正在尝试修改我的get_success_url,以便如果已将任何kwargs 传递给它,我可以使用它们构建返回的url。
这是我目前所拥有的:
class CalcUpdate(SuccessMessageMixin, UpdateView):
model = Calc
template_name = 'calc/cru_template.html'
form_class = CalcForm
def archive_calc(self, object_id):
model_a = Calc.objects.get(id = object_id)
model_b = Calc()
for field in model_a._meta.fields:
setattr(model_b, field.name, getattr(model_a, field.name))
model_b.pk = None
model_b.save()
self.get_success_url(idnumber = model_b.pk)
def form_valid(self, form):
#objects
if self.object.checked == True:
object_id = self.object.id
self.archive_calc(object_id)
#save
def get_success_url(self, **kwargs):
if kwargs != None:
return reverse_lazy('detail', kwargs = {'pk': kwargs['idnumber']})
else:
return reverse_lazy('detail', args = (self.object.id,))
到目前为止,这只是提供了一个 keyerror 详细信息 'idnumber'。
我已经打印了kwargs['idnumber'],它按预期返回了pk,但是我似乎看不出我哪里出了问题。
提前致谢。
【问题讨论】:
-
get_success_url不会在 Django 的通用视图中使用关键字参数调用。 -
@simeon 所以我什么都不能传递给它?最终结果只是能够重定向到一个新创建的 pk,如果它是由视图创建的。
-
你从哪里得到
idnumber?当你将它传递给get_success_url时,你必须以某种方式获取它,那么视图是如何知道它的呢? -
@ngenator 使用 self.get_success_url(idnumber = model_b.pk) 从视图中的 else 传递时获取它
-
您可以添加该视图代码的其余部分吗?