2016-11-13 116 views
1

我正在嘗試緩存我的列表。最大遞歸深度?如何預防?

但即使我在另一個任務下只有一個任務,它會運行ERROR最大遞歸深度?爲什麼?

task_recurse.html

{% if items %} 
    <ul> 
    {% for task in items %} 
     <li> 
     {{ task.name }} 

     {% with items=task.subtask.all template_name="task_recurse.html" %} 
      {% include template_name %} 
     {% endwith %} 


     </li> 
    {% endfor %} 
    </ul> 
{% endif %} 

task.html

{% include "task_recurse.html" with items=items %} 

任務模型

class task(models.Model): 

    name = models.CharField(max_length=100) 

    notes = models.TextField() 

    created = models.DateTimeField() 

    created_by = models.ForeignKey(User) 

    subtask = models.ManyToManyField('self') 

它給我的觀點一個錯誤?這是問題嗎?

def tasks(request): 

items = task.objects.all() 
return render(request, 'tasks.html', {'items': items}) 

所以兩個問題真的:

1)爲什麼這回最大遞歸深度時,我只有兩個任務,其中只有一個任務是子任務?

2)如何防止無限遞歸?

回答

1

爲您定義subtask = models.ManyToManyField('self')所以任務A具有taskB子任務和taskB具有任務A子任務 你可以看到它時,你註釋掉包括task_recurse.html

輸出模板:

Task B 
    Task A 
Task A 
    Task B 

您已經創建了一個圖關係而不是樹。 更改你ForeignKey的,你多對多關係會得到期望的結果:

subtask = models.ForeignKey('self',null=True, blank=True) 

我還包括空=真,空=真爲第一要素(樹頭)沒有子任務