kvesteri/sqlalchemy-utils — pull request #42 by mehcode (2013-09-09 07:57:41+00:00)
Title: Generic relationships

Had a question from a colleague moving from django about [GenericForeignKey](https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations) and a solution for sqlalchemy.

Here is what I came up with.

```python
from sqlalchemy_utils import generic_relationship

class User(Base):
__tablename__ = 'user'
id = sa.Column(sa.Integer, primary_key=True)

class Customer(Base):
__tablename__ = 'customer'
id = sa.Column(sa.Integer, primary_key=True)

class Event(Base):
__tablename__ = 'event'
id = sa.Column(sa.Integer, primary_key=True)

# This is used to discriminate between the linked tables.
object_type = sa.Column(sa.Unicode(255))

# This is used to point to the primary key of the linked row.
object_id = sa.Column(sa.Integer)

object = generic_relationship(object_type, object_id)

# Some general usage to attach an event to a user.
us_1 = User()
cu_1 = Customer()

session.add_all([us_1, cu_1])
session.commit()

ev = Event()
ev.object = us_1

session.add(ev)
session.commit()

# Find the event we just made.
session.query(Event).filter_by(object=us_1).first()

# Find any events that are bound to users.
session.query(Event).filter(Event.object.is_type(User)).all()
```