**Apache Airflow version**:

master

**Kubernetes version (if you are using kubernetes)** (use `kubectl version`):

**Environment**: breeze

**What happened**:

This DAG
```python
from airflow import models
from airflow.operators.dummy_operator import DummyOperator
from airflow.utils.dates import days_ago

with models.DAG("test", start_date=days_ago(1), schedule_interval=None,) as dag:
    t1 = DummyOperator(task_id="t1")
    t2 = DummyOperator(task_id="t2")
    t1 >> t2
```

is rendering like that:

<img width="1374" alt="Screenshot 2020-08-27 at 19 59 41" src="https://user-images.githubusercontent.com/9528307/91478403-11d7fb00-e8a0-11ea-91d0-d7d578bcb5a2.png">

**What you expected to happen**:

I expect to see same relations as defined in DAG file

**How to reproduce it**:

Render the example DAG from above.


**Anything else we need to know**:

I'm surprised by this bug 👀 

airflow/www/views.py
min_date = min(dates) if dates else None
        tis = dag.get_task_instances(start_date=min_date, end_date=base_date)
        task_instances: Dict[Tuple[str, datetime], models.TaskInstance] = {}
        for ti in tis:
            task_instances[(ti.task_id, ti.execution_date)] = ti
        expanded = set()
        
        
        
        node_count = 0
        node_limit = 5000 / max(1, len(dag.leaves))
        def encode_ti(task_instance: Optional[models.TaskInstance]) -> Optional[List]:
            if not task_instance:
                return None
            
            
            
            task_instance_data = [
                task_instance.state,
                task_instance.try_number,
                None,  
                None,  
            ]
            if task_instance.start_date:
                
                task_instance_data[2] = int(task_instance.start_date.timestamp())
                if task_instance.duration is not None:
                    task_instance_data[3] = int(task_instance.duration)
            return task_instance_data
        def recurse_nodes(task, visited):