Django Модель обратной связи, имеющая строку с именем - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу реализовать представление Django Rest Framework, которое возвращает дерево зависимостей объекта экземпляра модели.Вот код для такого представления:

class RoomTypeDependencies(viewsets.ViewSet):
    def list(self, request, pk):
        room_type = models.RoomType.objects.get(pk=pk)

        dependency_tree = self.get_object_dependencies(room_type)

        return Response(dependency_tree)

    def get_object_dependencies(self, instance):
        fields = instance.__class__._meta.get_fields()
        dependencies_to_return = []
        for field in fields:
            print(field.name)
            if field.__class__.__name__ == 'ManyToOneRel':
                dependency_to_return = []
                dependent_instances = getattr(instance, field.name)
                for dependent_instance in dependent_instances:
                    dependency_to_return.append(self.get_object_dependencies(dependent_instance))
                dependencies_to_return.append({field.__class__.__name__: dependency_to_return})

        return Response({str(instance): dependencies_to_return})

Кажется, что все работает, но я ожидал, что getattr(instance, field.name) возвратит зависимые экземпляры, соответствующие обратной связи, как при использовании шаблона model_object_instance.reverse_relationshio_name, но он возвращает RelatedManager объект вместо.Проблема в моем случае заключается в том, что у меня есть имя обратной связи в строковой переменной (field.name).

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