Django model translations with even less nasty hacks.
Project description
django-parlor
Django model translations with even less nasty hacks.
Installation
pip install django-parlor
Usage
from django.contrib import admin
from django.db import models
from parlor.admin import TranslatableAdmin
from parlor.models import TranslatableModel
class MyModel(TranslatableModel):
...
class MyModelTranslation(models.Model):
parent = MyModel.get_parent_field()
language_code = MyModel.get_language_field()
label = models.CharField(max_length=32)
...
class Meta:
unique_together = [('parent', 'language_code')]
admin.site.register(MyModel, TranslatableAdmin)
animal = MyModel.objects.create()
animal.translations.create(language_code='en', label='Frog')
animal.translations.create(language_code='de', label='Frosch')
print(animal.label)
Status
Right now this is more of a proof-of-concept. If people are interested in this library it could certainly be expanded.
Relation to django-parler
Standing on the Shoulders of Giants
There are two popular libraries for model translation in Django: django-modeltranslation and django-parler. The former adds additional columns to the same table while the latter adds a new table for each translatable model. Both of these libraries use a lot of magic which makes them easy to use, but also leads to some hard-to-debug edge cases.
There is also django-translated-fields, which uses the same basic approach as django-modeltranslation, but with much less magic (and much less lines of code).
Here I try to do something similar for django-parler, which has been unmaintained for some time now.
Migration
If you want to migrate from django-parler to django-parlor, you need to replace
all instances of parler.TranslatedFields by explicit translation models as
described above. Note that the parent field is called master in
django-parler.
To keep using the same data, you will also need to set Meta.db_table to the
name generated by django-parler (typically myapp_mymodel_translation).
Finally you should run manage.py makemigrations. The generated migrations
will only contain minor changes though.
Conceptual differences
- With django-parlor, the translation model must be created explicitly.
- In the admin UI, django-parlor uses a stock inline instead of a custom tabbed interface.
- django-parlor only provides basic attribute access while django-parler provides a lot more features.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_parlor-0.0.3.tar.gz.
File metadata
- Download URL: django_parlor-0.0.3.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d6281073a836550cfc331d30465b1a0d6d7fd9cd2b64ef6f77b1b5fabd761f9
|
|
| MD5 |
221f0885b89f2265c8a98a0700b8bd19
|
|
| BLAKE2b-256 |
a3d1fa5a23d7474cbcbb13213fcf11fb85a922743c2ec5795e6f1d3d7490904b
|
Provenance
The following attestation bundles were made for django_parlor-0.0.3.tar.gz:
Publisher:
main.yml on xi/django-parlor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
django_parlor-0.0.3.tar.gz -
Subject digest:
1d6281073a836550cfc331d30465b1a0d6d7fd9cd2b64ef6f77b1b5fabd761f9 - Sigstore transparency entry: 623175858
- Sigstore integration time:
-
Permalink:
xi/django-parlor@07b1cdd68804b75f714480d39b555f8df2b2ffa2 -
Branch / Tag:
refs/tags/0.0.3 - Owner: https://github.com/xi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@07b1cdd68804b75f714480d39b555f8df2b2ffa2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file django_parlor-0.0.3-py3-none-any.whl.
File metadata
- Download URL: django_parlor-0.0.3-py3-none-any.whl
- Upload date:
- Size: 4.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47699423e81e8924ec62a5ceb33859526599392de39f26d1dcf1ab0ebfc3285c
|
|
| MD5 |
99168fe14bf81097385d3df605401a73
|
|
| BLAKE2b-256 |
60089c985380b7dc2314226da1796913b37bfa8e0b4e642007719937ef9b6d38
|
Provenance
The following attestation bundles were made for django_parlor-0.0.3-py3-none-any.whl:
Publisher:
main.yml on xi/django-parlor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
django_parlor-0.0.3-py3-none-any.whl -
Subject digest:
47699423e81e8924ec62a5ceb33859526599392de39f26d1dcf1ab0ebfc3285c - Sigstore transparency entry: 623175865
- Sigstore integration time:
-
Permalink:
xi/django-parlor@07b1cdd68804b75f714480d39b555f8df2b2ffa2 -
Branch / Tag:
refs/tags/0.0.3 - Owner: https://github.com/xi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@07b1cdd68804b75f714480d39b555f8df2b2ffa2 -
Trigger Event:
push
-
Statement type: