gpt4 book ai didi

python - django rest 框架的多个 lookup_fields

转载 作者:太空狗 更新时间:2023-10-29 20:49:14 25 4
gpt4 key购买 nike

我有多个 API,它们在历史上使用 id 作为查找字段:

/api/organization/10

我有一个使用这些 API 的前端。

我正在构建一个新界面,出于某些原因,我想使用 slug 而不是 id:

/api/organization/my-orga

API 是使用 Django Rest Framework 构建的。除了查找字段的变化,api 行为应该保持不变。

有没有一种解决方案可以让我的 API 同时使用 slugpk ?这两条路径应该给他们相同的结果:

/api/organization/10
/api/organization/my-orga

这是我的 API 定义:

# urls.py
router = DefaultRouter()
router.register(r'organization', Organization)
urlpatterns = router.urls

#view.py
class Organization(viewsets.ModelViewSet):
queryset = OrganisationGroup.objects.all()
serializer_class = OrganizationSerializer

# serializer.py
class OrganizationSerializer(PermissionsSerializer):
class Meta:
model = Organization

最佳答案

试试这个

from django.db.models import Q
import operator
from functools import reduce
from django.shortcuts import get_object_or_404

class MultipleFieldLookupMixin(object):
def get_object(self):
queryset = self.get_queryset() # Get the base queryset
queryset = self.filter_queryset(queryset) # Apply any filter backends
filter = {}
for field in self.lookup_fields:
filter[field] = self.kwargs[field]
q = reduce(operator.or_, (Q(x) for x in filter.items()))
return get_object_or_404(queryset, q)

然后在 View 中

class Organization(MultipleFieldLookupMixin, viewsets.ModelViewSet):
queryset = OrganisationGroup.objects.all()
serializer_class = OrganizationSerializer
lookup_fields = ('pk', 'another field')

关于python - django rest 框架的多个 lookup_fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com