如何使用另一个视图的参数调用 GenericModelViews?
How to call GenericModelViews with arguments from another view?
我想 return GenericDeleteView 使用另一个视图的参数。
我有一个视图,它获取对象的 pk,我想使用 Django
通用 DeleteView 子类删除它。
问题是pk可以是不同型号。
我定义了相应的 GenericDeleteViews,如果我将它们添加到 urls.py 并从那里使用位置参数触发它们,一切正常。但我想要一些不同的东西。
我想要的示例:
views.py
def delete_object_view(request, pk):
if FirstModel.objects.filter(pk=pk).exists():
return FirstModelDeteleView.as_view()(request, !!pk!!)
else:
return SecondModelDeleteView.as_view()(request, !!pk!!)
但情况是,这不会将 pk 传递给 DeleteView,它 return 是错误:
必须使用对象 pk 或 slug 调用通用删除视图
我尝试了很多替代方案,通过了 kwargs={'pk':pk}
和其他一些,但似乎没有任何效果。
我很绝望,甚至很艰难我知道一些解决方法,这听起来应该是可行的,而且看起来很优雅。
感谢任何建议。
来自docs:
您应该使用 reverse()
网址解析器。
试试这个:
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
if FirstModel.objects.filter(pk=pk).exists():
return HttpResponseRedirect('first_model_delete',kwargs={'pk' : pk})
else:
return HttpResponseRedirect('second_model_delete',kwargs={'pk' : pk})
I will not follow your approach in calling another view from a view. (i find it is not elegant solution)
I have not test this answer, so you may need to debug some minor errors later.
因为您的DeleteView
可能使用不同的Model
,那么您可能需要动态确定Model
。
您仍然可以使用通用 DeleteView
. Since it uses the SingleObjectMixin
, instead of specifying the model
in the View, you should then overwrite get_queryset
method or get_object
方法。
示例代码:
class MyDeleteView(DeleteView):
def get_queryset(self):
if FirstModel.objects.filter(pk=<pk>).exists():
return FirstModel.objects.all()
else:
return SecondModel.objects.all()
我想 return GenericDeleteView 使用另一个视图的参数。
我有一个视图,它获取对象的 pk,我想使用 Django
通用 DeleteView 子类删除它。
问题是pk可以是不同型号。
我定义了相应的 GenericDeleteViews,如果我将它们添加到 urls.py 并从那里使用位置参数触发它们,一切正常。但我想要一些不同的东西。
我想要的示例:
views.py
def delete_object_view(request, pk):
if FirstModel.objects.filter(pk=pk).exists():
return FirstModelDeteleView.as_view()(request, !!pk!!)
else:
return SecondModelDeleteView.as_view()(request, !!pk!!)
但情况是,这不会将 pk 传递给 DeleteView,它 return 是错误:
必须使用对象 pk 或 slug 调用通用删除视图
我尝试了很多替代方案,通过了 kwargs={'pk':pk}
和其他一些,但似乎没有任何效果。
我很绝望,甚至很艰难我知道一些解决方法,这听起来应该是可行的,而且看起来很优雅。
感谢任何建议。
来自docs:
您应该使用 reverse()
网址解析器。
试试这个:
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
if FirstModel.objects.filter(pk=pk).exists():
return HttpResponseRedirect('first_model_delete',kwargs={'pk' : pk})
else:
return HttpResponseRedirect('second_model_delete',kwargs={'pk' : pk})
I will not follow your approach in calling another view from a view. (i find it is not elegant solution)
I have not test this answer, so you may need to debug some minor errors later.
因为您的DeleteView
可能使用不同的Model
,那么您可能需要动态确定Model
。
您仍然可以使用通用 DeleteView
. Since it uses the SingleObjectMixin
, instead of specifying the model
in the View, you should then overwrite get_queryset
method or get_object
方法。
示例代码:
class MyDeleteView(DeleteView):
def get_queryset(self):
if FirstModel.objects.filter(pk=<pk>).exists():
return FirstModel.objects.all()
else:
return SecondModel.objects.all()