#

## Django documentation

# 12. Relating a model to another model more than once

In this example, a `Person` can have a `mother` and `father` -- both of which are other `Person` objects.

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

## Model source code

    from django.core import meta

    class Person(meta.Model):
        full_name = meta.CharField(maxlength=20)
        mother = meta.ForeignKey('self', null=True, related_name='mothers_child')
        father = meta.ForeignKey('self', null=True, related_name='fathers_child')

        def __repr__(self):
            return self.full_name

## API reference

### Person objects have the following methods:

- `add_fathers_child()`
- `add_mothers_child()`
- `delete()`
- `get_father()`
- `get_fathers_child()`
- `get_fathers_child_count()`
- `get_fathers_child_list()`
- `get_mother()`
- `get_mothers_child()`
- `get_mothers_child_count()`
- `get_mothers_child_list()`
- `save()`

## Sample API usage

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

    >>> from django.models.examplemodel import persons

    # Create two Person objects -- the mom and dad in our family.
    >>> dad = persons.Person(full_name='John Smith Senior', mother=None, father=None)
    >>> dad.save()
    >>> mom = persons.Person(full_name='Jane Smith', mother=None, father=None)
    >>> mom.save()

    # Give mom and dad a kid.
    >>> kid = persons.Person(full_name='John Smith Junior', mother=mom, father=dad)
    >>> kid.save()

    >>> kid.get_mother()
    Jane Smith
    >>> kid.get_father()
    John Smith Senior
    >>> dad.get_fathers_child_list()
    [John Smith Junior]
    >>> mom.get_mothers_child_list()
    [John Smith Junior]
    >>> kid.get_mothers_child_list()
    []
    >>> kid.get_fathers_child_list()
    []

## Comments

## 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: