Я хочу реализовать представление 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
).