显然,使用Django REST框架的视图只能有一个级别的继承。
这有效:
class Foo(View):
def get(self, request):
return "hello world"
虽然这不是:
class Foo(View):
def get(self, request):
return self.bar()
class Bar(Foo):
def bar(self):
return "hello world"
由于as_view()中的代码,这似乎是故意的 http://django-rest-framework.org/_modules/views.html
有没有人知道解决方法?
谢谢!
编辑: 好吧,我发现我能做到:
class Foo(View):
def __init__(self):
View.__init__(proxy = self)
def get(self, request):
return self.proxy.bar()
class Bar(Foo):
def bar(self):
return "hello world"
但从长远来看,这并非真正“可接受”。有谁知道更合理的方式吗?
答案 0 :(得分:0)
如果这个问题仍然存在,我认为我们没有足够的信息来回答这个问题。
首先,
class Foo(object):
def get(self):
return self.bar()
class Bar(Foo):
def bar(self):
return "hello world"
无论Foo是否扩展了django-rest-framework的View类,在任何情况下都可能不是好代码。假设它有一个bar方法,你实际上是在破坏foo.get,但它没有。
>>> foo = Foo()
>>> foo.get()
AttributeError: 'Foo' object has no attribute 'bar'
此:
>>> bar = Bar()
>>> bar.get()
会奏效。但是,你通过这种方式编写它实际上毁了Foo。至少提供一个存根方法。
无论如何,你还没有发布你的urls.py,所以我不确定你是在尝试做Foo.as_view()还是Bar.as_view()。我用djangorestframework.views.View测试了它。 ,并且,正如预期的那样,
#urls.py
from testviews.views import Foo, Bar
urlpatterns = patterns('',
url(r'^$', Bar.as_view(), name='home'),
)
对我来说很好,而
urlpatterns = patterns('',
url(r'^$', Foo.as_view(), name='home'),
)
与上述代码不起作用的原因相同。