#

## Django documentation

# 11. Relating an object to itself, many-to-one

To define a many-to-one relationship between a model and itself, use `ForeignKey('self')`.

In this example, a `Category` is related to itself. That is, each `Category` has a parent `Category`.

Set `related_name` to designate what the reverse relationship is called.

## Model source code

    from django.core import meta

    class Category(meta.Model):
        name = meta.CharField(maxlength=20)
        parent = meta.ForeignKey('self', null=True, related_name='child')
        class META:
            module_name = 'categories'

        def __repr__(self):
            return self.name

## API reference

### Category objects have the following methods:

- `add_child()`
- `delete()`
- `get_child()`
- `get_child_count()`
- `get_child_list()`
- `get_parent()`
- `save()`

## Sample API usage

This sample code assumes the above model has been saved in a file `examplemodel.py`.

    >>> from django.models.examplemodel import categories

    # Create a few Category objects.
    >>> r = categories.Category(id=None, name='Root category', parent=None)
    >>> r.save()
    >>> c = categories.Category(id=None, name='Child category', parent=r)
    >>> c.save()

    >>> r.get_child_list()
    [Child category]
    >>> r.get_child(name__startswith='Child')
    Child category
    >>> r.get_parent()
    Traceback (most recent call last):
        ...
    CategoryDoesNotExist

    >>> c.get_child_list()
    []
    >>> c.get_parent()
    Root category

## Comments

### aCC August 20, 2005 at 2:45 p.m.

See http://code.djangoproject.com/wiki/CookB... for a more verbose example.

## Post a comment

Note: Please only use the comments for questions/critcisms/suggestions on the docs; if you experience errors please file a ticket, ask in the IRC channel, or post to the django-users list. Comments will be periodically reviewed, integrated into the documentation proper, and removed.

Your name:

Comment: