24. Mutually referential many-to-one relationships
This example is for Django's SVN release, which can be significantly different from previous releases. Get old examples here: 0.96, 0.95.
Strings can be used instead of model literals to set up “lazy” relations.
Model source code
from django.db.models import *
class Parent(Model):
name = CharField(max_length=100, core=True)
# Use a simple string for forward declarations.
bestchild = ForeignKey("Child", null=True, related_name="favoured_by")
class Child(Model):
name = CharField(max_length=100)
# You can also explicitally specify the related app.
parent = ForeignKey("mutually_referential.Parent")
Sample API usage
This sample code assumes the above models have been saved in a file mysite/models.py.
>>> from mysite.models import # Create a Parent >>> q = Parent(name='Elizabeth') >>> q.save() # Create some children >>> c = q.child_set.create(name='Charles') >>> e = q.child_set.create(name='Edward') # Set the best child >>> q.bestchild = c >>> q.save() >>> q.delete()

