mar*_*ele 9 python django rest django-rest-framework
在Django休息框架中,有没有办法拥有多个查找字段?我知道这听起来不是很REST友好.
我有一个Company模型,我想首先通过他们的国家列出它们,然后通过一个slug字段列出它们,例如:/companies/<iso_country>/<slug>/.有没有办法做到这一点?
小智 10
创建mixin,如:
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]
        return get_object_or_404(queryset, **filter)  # Lookup the object
并将此mixin添加到您的视图集:
class YourCountryViewSet(MultipleFieldLookupMixin, generics.RetrieveAPIView):
    lookup_fields = ('iso_country', 'slug')
...
来源:http://www.django-rest-framework.org/api-guide/generic-views/#creating-custom-mixins
假设您使用的是路由器,我认为您可以执行以下操作:
router.register(r'companies/(?P<iso_country>[^/.]+)/', YourCompanyViewSet, 'company-base')
您必须在 ViewSet 中定义slug为您的位置。lookup_field
例如,你的课程看起来像
class YourCountryViewSet(GenericViewSet):
     lookup_field = 'slug'
    def create(self, request, iso_country):
        ...
    def retrieve(self, request, iso_country, slug):
        ...
| 归档时间: | 
 | 
| 查看次数: | 2913 次 | 
| 最近记录: |