我试图修改我的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,))
Run Code Online (Sandbox Code Playgroud)
到目前为止,这只是keyerror详细介绍'idnumber'.
我打印过kwargs['idnumber'],它pk按预期返回,但我似乎无法看到我在哪里出错了.
提前致谢.
form_valid应该返回HttpResponseRedirect https://github.com/django/django/blob/master/django/views/generic/edit.py#L100,在你的情况下,你永远不会.我不知道你之后是否有任何代码#save,但看看我在你的代码中做出的评论
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()
return self.get_success_url(idnumber = model_b.pk) # you never return this value
def form_valid(self, form):
#objects
if self.object.checked == True:
object_id = self.object.id
return HttpResponseRedirect(self.archive_calc(object_id)) # you never return a `HttpResponse`
#save -- If this is where you are saving... you can store the value from archive and return it after saving
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,))
Run Code Online (Sandbox Code Playgroud)
你也不需要手动复制字段,只是这样做(假设没有unique约束,因为如果有,你的版本也会失败):
def archive_calc(self, object_id):
c = self.model.objects.get(id = object_id)
c.pk = None
c.save()
return self.get_success_url(idnumber = c.pk)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16214 次 |
| 最近记录: |