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 | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file django-multiforeignkey-0.0.2.tar.gz
.
File metadata
- Download URL: django-multiforeignkey-0.0.2.tar.gz
- Upload date:
- Size: 3.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 930d4c22dac2ae5bc0bf2e99d072d0039834e4e0c750463e29f35a7f792d3ee9 |
|
MD5 | 634c8e009305adae2caca7b2f26d90cf |
|
BLAKE2b-256 | 9b67104c1b431a1b6b813ed78c343097261d4052700b6804efa57f18cec9e594 |