Making a tree structure in django models?

activerecord, django, django-models, python

Solution

`ManyToOneRel` is an internal implementation class, it's not for use in your models.

But why do you think you need it anyway? As the documentation explains in detail, when you define a ForeignKey, you automatically get a reverse relation. So in your case, if you define `parent` then you automatically get `self.foomodel_set` already: and you can make it even more explicit by using the `related_name` parameter:

parent = models.ForeignKey('self', blank=True, null=True, related_name='children')

Note that if you're planning on doing complicated things with trees, you probably want to be using the django-mptt library.

Problem

I want to have a model with 2 fields, children and parent. How do I do this in django? I have something like this ``` from django.db import models class FooModel(models.Model) parent = models.ForeignKey('self', blank=True, null=True) children = models.ManyToOneRel('self', blank=True, null=True) def __init__(self, *args, **kwargs): super(FooModel, self).__init__(*args, **kwargs) self.parent.children.add(self) ``` But I don't think i'm supposed to use the ManyToOneRel like this (especially because it's giving me a keyword error on 'blank'). Any advice?

Original source