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


Release history Release notifications

This version
History Node

0.0.2

History Node

0.0.1

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
django-multiforeignkey-0.0.2.tar.gz (3.2 kB) Copy SHA256 hash SHA256 Source None Sep 15, 2016

Supported by

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