2016-11-13 14 views
1

私はリストを再帰しようとしています。最大再帰深度?どのように防止する?

私は別のタスクの下で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}) 

ので、2つの質問は本当に:

1)なぜ私は1つのタスクだけがサブタスクである二つのタスクを持って、このリターンの最大の再帰の深さ?

2)どのようにして無限再帰を防ぐことができますか?

答えて

1

あなたはsubtask = models.ManyToManyField('self')がそうtaskAがtaskBサブタスクがあり、コメントアウトtask_recurse.html

出力でテンプレート含めるとあなたはそれを見ることができ taskBがtaskAサブタスクを持って定義されている:

Task B 
    Task A 
Task A 
    Task B 

あなたが作成しました木の代わりにグラフの関係。 変更しますのForeignKeyとあなたへの多対多の関係が希望を取得します結果:

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

は、私はまた、最初の要素(木ヘッド)など=空白、null = Trueで真含ま何のサブタスクを持っていない

関連する問題