Как заблокировать прямой доступ к вложенным ресурсам Tastypie? - PullRequest
0 голосов
/ 20 октября 2019

Каков наилучший способ показать вложенный ресурс только как часть родительского?

Рассмотрим следующие ресурсы:

class ParentResource(resources.ModelResource):
    children = fields.ToMany('api.resources.ChildrenResource', 'children', related_name='parent')
    class Meta:
        queryset = Parent.objects.all()

class ChildrenResource(resources.ModelResource):
    class Meta:
        queryset = Children.objects.all()

Я бы хотел добиться следующего поведения:

Если пользователь запрашивает /api/v1/parentresource/, он получает всех родителей с родственными детьми;

Если пользователь запрашивает /api/v1/childrenresource/, он ничего не получает, или перенаправление, или что угодно, кроме всего ChildrenResource.

Ну, мне удалось, как этого добиться:

class ChildrenResource(resources.ModelResource):
    class Meta:
        queryset = Children.objects.all()
    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)%s$" %
                (self._meta.resource_name, trailing_slash()),
                self.wrap_view('return_none'), name="return_none"),
        ]
    def return_none(self, request, **kwargs):
        return HttpResponse()
...