Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Correct way to model recursive relationship in Django

My application has two node types: a parent node which can hold recursive child nodes. Think of it like the post-comment system in SO, but comments can be recursive:

parent_1
  child_11
  child_12
    child_121
  child_13
parent_2
  child_21
    child_211
      child_2111

Important to note that the parent nodes have different attributes and behavior than the child nodes.

Barring recursion I would have the following models:

class Parent(models.Model):
    # fields ...

class Child(models.Model):
    parent = models.ForeignKey(Parent)
    # other fields ...

But the recursion complicates this. What is the correct (and presumably most efficient) way of modeling this relationship in Django?

like image 205
Yuval Adam Avatar asked Mar 20 '10 14:03

Yuval Adam


2 Answers

With django-mptt or django-treebeard.

like image 141
Daniel Roseman Avatar answered Sep 17 '22 19:09

Daniel Roseman


Could you use a Generic Relation and just add validation in the save() method (or in a signal or form validation) to ensure the object is an instance of one or the other?

like image 30
Tom Avatar answered Sep 20 '22 19:09

Tom