nodes: 0, module; 1, function_definition; 2, function_name:choice; 3, parameters; 4, block; 5, identifier:self; 6, identifier:obj; 7, expression_statement; 8, expression_statement; 9, expression_statement; 10, return_statement; 11, comment:"""
          Overloads the choice method to add the position
          of the object in the tree for future sorting.
          """; 12, assignment; 13, assignment; 14, binary_operator:super(MPTTModelChoiceIterator,
                       self).choice(obj) + ((tree_id, left),); 15, identifier:tree_id; 16, call; 17, identifier:left; 18, call; 19, call; 20, tuple; 21, identifier:getattr; 22, argument_list; 23, identifier:getattr; 24, argument_list; 25, attribute; 26, argument_list; 27, tuple; 28, identifier:obj; 29, attribute; 30, integer:0; 31, identifier:obj; 32, attribute; 33, integer:0; 34, call; 35, identifier:choice; 36, identifier:obj; 37, identifier:tree_id; 38, identifier:left; 39, attribute; 40, identifier:tree_id_attr; 41, attribute; 42, identifier:left_attr; 43, identifier:super; 44, argument_list; 45, attribute; 46, identifier:_mptt_meta; 47, attribute; 48, identifier:_mptt_meta; 49, identifier:MPTTModelChoiceIterator; 50, identifier:self; 51, attribute; 52, identifier:model; 53, attribute; 54, identifier:model; 55, identifier:self; 56, identifier:queryset; 57, identifier:self; 58, identifier:queryset
code: def choice(self, obj):
          """
          Overloads the choice method to add the position
          of the object in the tree for future sorting.
          """
          tree_id = getattr(obj, self.queryset.model._mptt_meta.tree_id_attr, 0)
          left = getattr(obj, self.queryset.model._mptt_meta.left_attr, 0)
          return super(MPTTModelChoiceIterator,
                       self).choice(obj) + ((tree_id, left),)