Ros*_*ers 12 django-rest-framework
我曾经在Django Rest Framework(DRF)2中遵循这种模式:
class Foo(models.Model):
user = models.ForeignKey(User)
class FooSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Foo
fields = ('url')
class FooViewset(viewsets.ModelViewSet):
def get_queryset(self):
return Foo.objects.filter(user=self.request.user)
serializer = FooSerializer
model = Foo # <-- the way a ModelViewSet is told what the object is in DRF 2
[ in urls.py]
from rest_framework import routers
router = routers.DefaultRouter()
router.register('Foo', views.FooViewSet)
Run Code Online (Sandbox Code Playgroud)
在DRF 3中,我现在得到:
AssertionError at /
`base_name` argument not specified, and could not automatically
determine the name from the viewset, as it does not have a
`.queryset` attribute.
Run Code Online (Sandbox Code Playgroud)
如何get_queryset覆盖一个实例rest_framework.viewsets.ModelViewSet?
Ros*_*ers 17
想出这个.该model领域rest_framework.viewsets.ModelViewSet似乎是在DRF3擅离职守.现在,如果你重写get_queryset你需要指定第三个参数routers.DefaultRouter().register是该basename参数.然后,该函数将不会关闭并尝试在该不存在的queryset字段上找到它ModelViewSet.
例如
router = routers.DefaultRouter()
[...]
router.register('/rest/FooBar'/, views.FooBarViewSet, 'foobar-detail')
#^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8409 次 |
| 最近记录: |