1

我不确定如何在标题中完整地说明这一点,所以请原谅我。本质上,我想定义一个 get_object() 方法,就像这里描述的那样

http://django-rest-framework.org/tutorial/3-class-based-views.html#rewriting-our-api-using-class-based-views

但以抽象的方式。例如,假设我想像这样扩展 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 模型中获取一个对象,其中 pk 在 get 方法中给出。我猜也许 BlogDetail 应该有某种init方法来定义如何处理我正在使用的模型的名称,但我不太确定这将如何工作

4

1 回答 1

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)

当然,这是一个粗略的例子,你会想让它更健壮......

于 2013-06-21T17:35:49.330 回答