У меня есть следующий код, который не работает:
В 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?Любая помощь будет оценена.Спасибо.