Пользовательский миксин для поиска объектов из нескольких полей в Django REST - PullRequest
0 голосов
/ 27 октября 2018

У меня есть следующий код, который не работает:

В models.py:

class Unit(models.Model):
   unit_name = models.CharField(max_length=255)

В views.py

class MultipleFieldLookupMixin(object):
"""
Apply this mixin to any view or viewset to get multiple field filtering
based on a `lookup_fields` attribute, instead of the default single field filtering.
"""
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:
        if self.kwargs[field]: # Ignore empty fields.
            filter[field] = self.kwargs[field]
    obj = get_object_or_404(queryset, **filter)  # Lookup the object
    self.check_object_permissions(self.request, obj)
    return obj    

class UnitViewSet(viewsets.ReadOnlyModelViewSet, MultipleFieldLookupMixin):
serializer_class = UnitSerializer
queryset = Unit.objects.all()
lookup_fields = ('pk', 'unit_name')

В роутере.py

router.register(r'units', UnitViewSet)

Я могу получить доступ к unit / pk, но unit / unit_name выдает ошибку 404.Должен ли я написать собственный URL, чтобы сделать эту работу?Если так, то какой смысл использовать маршрутизаторы с ViewSets?Любая помощь будет оценена.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...