Skip to main content

Django ForeignKey that links to one of several specified models

Project description

django-multiforeignkey

Django ForeignKey that links to one of several specified models:

class Comment(models.Model):
        user = models.ForeignKey(User)
        text = models.TextField()

        # users may leave comments for blog posts, articles or votings
        object = MultiForeignKey(Post, Article, Voting)

Unlike GenericForeignKey, the field uses native database foreign keys and provides maximum speed and reliability.

WARNING

This is a preliminary alpha version which most probably doesn’t fully work as advertised. I had to publish it unfinished because I had to use it in my project.

Installation

pip install django-multiforeignkey

Usage

Add multiforeignkey to INSTALLED_APPS:

# settings.py

INSTALLED_APPS = [
        ...
        'multiforeignkey',
]

Add a field to your models:

# comments/models.py

from multiforeignkey.models import MultiForeignKey

class Comment(models.Model):
        user = models.ForeignKey(User)
        text = models.TextField()

        # users may leave comments for blog posts, articles or votings
        object = MultiForeignKey(Post, Article, Voting)

Create the corresponding database tables:

./manage.py makemigrations && ./manage.py migrate

Use the new field as if it were a real database field:

comment = Comment.objects.filter(object=post)
assert comment.object is post
comment.object = voting
assert comment.object is voting
comment.save()

or use specific subfields:

comment = Comment.objects.filter(post=post)
assert comment.post is post
assert comment.article is None
assert comment.voting is None
comment.voting = voting
assert comment.post is None
assert comment.article is None
assert comment.voting is voting
comment.save()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-multiforeignkey, version 0.0.2
Filename, size File type Python version Upload date Hashes
Filename, size django-multiforeignkey-0.0.2.tar.gz (3.2 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page