woe*_*ev. 16 django-views python-3.x django-rest-framework
问题是这样的:我正在尝试替换标准的查询集:
queryset: MyModel.objects.all()
Run Code Online (Sandbox Code Playgroud)
在我身上:
def get_queryset(self, username=None):
if username is not None:
user = UserModel.objects.get(username=username)
queryset = MyModel.filter(author=user)
return queryset
else:
queryset = MyModel.objects.all()
return queryset
Run Code Online (Sandbox Code Playgroud)
当我删除"queryset",并只留下"get_queryset"时,会出现一个错误:
AssertionError:
base_name
未指定参数,并且无法自动确定视图集中的名称,因为它没有.queryset
属性.
一共看起来如此:
class MyModelView(viewsets.ModelViewSet):
permissions_classes = (permissions.IsAuthenticated,)
serializer_class = MyModelleSerializer
def get_queryset(self, username=None):
if username is not None:
user = UserModel.objects.get(username=username)
queryset = MyModel.filter(author=user)
return queryset
else:
queryset = MyModel.objects.all()
return queryset
lookup_field = 'username'
lookup_value_regex = '[a-zA-Z0-9$&(._)\-]+'
Run Code Online (Sandbox Code Playgroud)
那么如何正确覆盖方法?
Jah*_*nov 39
在最新的DRF中,base_name
如果您没有queryset
定义,则需要在视图集URL中明确设置.
所以,这样的事情应该做得很好:
router.register(r'my-model/', MyModelView, basename='MyModel')
Run Code Online (Sandbox Code Playgroud)
看到这个:docs 希望它有所帮助.
小智 8
您必须basename
在 url.py 文件中添加一个为 register 方法调用的参数,就像 url.py 中的以下代码:
"In url.py"
...
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'my-model/' , MyModelView , basename='MyModel')
urlpattern=[...]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9559 次 |
最近记录: |