我不确定如何在标题中完全指定,所以请原谅我。本质上,我想定义一个方法get_object()方法,就像这里描述的那样
但是以抽象的方式。例如,假设我想将APIView扩展为
class BetterAPIView(APIView):
def get_object(self, pk):
try:
return ***Class name***.objects.get(pk=pk)
catch:
raise Http404
因此,当我定义一个视图时,这个get_object方法有一个自动定义。例如,如果我对博客文章的观点是
class BlogDetail(BetterAPIView):
def get(self, request, pk, format=None):
Post = Post.get_object(pk)
我希望get_object方法自动知道Post.get_object(pk)意味着我想从Post模型中获取一个对象,并在get方法中给出了pk。我猜可能BlogDetail应该有某种 init 方法,该方法定义了如何处理我正在使用的模型的名称,但我不太清楚这是如何工作的
答案 0 :(得分:2)
如何执行基于Django类的通用视图,并且需要设置model
属性?
class BetterAPIView(APIView):
model = None
def __init__(self, *args, **kwargs):
if self.model is None:
raise SomeSortOfConfigurationException
super(BetterAPIView, self).__init__(*args, **kwargs)
def get_object(self, pk):
try:
return self.model.objects.get(pk=pk)
catch:
raise Http404
现在:
class BlogDetail(BetterAPIView):
model = Post
def get(self, request, pk, format=None):
post = self.get_object(pk)
当然,这是一个粗略的例子,你想让它更健壮......