我不知道如何在标题中完整地说明这一点,所以请原谅我。本质上,我想定义一个 get_object() 方法,就像这里描述的那样
但以一种抽象的方式。例如,假设我想扩展 APIView
class BetterAPIView(APIView):
def get_object(self, pk):
try:
return ***Class name***.objects.get(pk=pk)
catch:
raise Http404
这样当我定义 View 时,就会自动定义这个 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 方法,它定义如何处理我正在使用的模型的名称,但我不太确定这是如何工作的
最佳答案
如何执行通用 Django 基于类的 View 的操作并拥有需要设置的 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)
当然,这是一个粗略的示例,您希望使其更加健壮......
关于python - 有没有办法指定接受 __init__ 值的抽象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240885/