A small toolset that helps you to work with Django's generic relations
Project description
The application provides some syntax sugar for working with Django’s generic relations
Installation
Just install the package from PyPI within pip
pip install django-generic-helpers
…or pipenv
pipenv install django-generic-helpers
…or even poetry
poetry add django-generic-helpers
That’s all. No need to add this into INSTALLED_APPS of your project or something like that.
Usage
That’s how did you work with generic relations before:
# models.py
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
class Post(models.Model):
pass
class Image(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.IntegerField()
content_object = GenericForeignKey(ct_field='content_type', fk_field='object_id')
# Example of filtering
post = Post.objects.get(pk=1)
images = Image.objects.filter(
content_type=ContentType.objects.get_for_object(post),
object_id=post.id
)
Looks verbose a bit, yep? Let’s rewrite this with django-generic-helpers
# models.py
from django.db import models
from generic_helpers.fields import GenericRelationField
class Post(models.Model):
pass
class Image(models.Model):
content_object = GenericRelationField()
# Example of filtering
post = Post.objects.get(pk=1)
images = Image.objects.filter(content_object=post)
Personally, I found it much simpler and cleaner.
Features the application provides:
Creating an arbitrary number of generic relation fields, both required and optional;
Providing custom names for content_type and object_id columns
You can define a whitelist (or a black one) of models that could (not) be written into the field
Please, follow up the documentation for details.
Contributing
If you found a bug, feel free to drop me an issue on the repo;
Implemented a new feature could be useful? Create a PR!
A few words if you plan to send a PR:
Please, write tests!
Follow PEP-0008 codestyle recommendations.
When pushing, please wait while Travis CI will finish his useful work and complete the build. And if the build fails, please fix the issues before PR
And of course, don’t forget to add yourself into the authors list ;)
License
The license is MIT.
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
Built Distribution
File details
Details for the file django-generic-helpers-1.2.0.tar.gz
.
File metadata
- Download URL: django-generic-helpers-1.2.0.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.11 CPython/3.10.0 Linux/5.4.0-91-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3ed133524b2d7d30f333036be18000b5805ea02ec952059cf9638da4138ccf0 |
|
MD5 | 55f0e6d0c7a10bbd3c98382cdb413aac |
|
BLAKE2b-256 | 5c5d37b033eb40c38e11ba11106d4f1ef52f1ece898f7abd1227a8abe8ce4455 |
File details
Details for the file django_generic_helpers-1.2.0-py3-none-any.whl
.
File metadata
- Download URL: django_generic_helpers-1.2.0-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.11 CPython/3.10.0 Linux/5.4.0-91-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 094dff395f472be3c2c61d2d55f00af0c45755c789ac695c70c1124eaec8c5b5 |
|
MD5 | d20e64c4438d6b740ee4c3dd37290d22 |
|
BLAKE2b-256 | bb3a18affcce58b7798a6526b40e6a3c84e58cb8ca515e4d950057eb8efd69be |