Constraints¶
All constraints are enforced by PostgreSQL. Constraints can be applied to all fields documented in Fields.
Warning
Don’t forget to run python manage.py makemigrations
after modifying constraints.
Required/optional¶
Default language required and all other languages optional:
class MyModel(models.Model): title = LocalizedField()
All languages are optional and the field itself can be
None
:class MyModel(models.Model): title = LocalizedField(blank=True, null=True, required=False)
All languages are optional but the field itself cannot be
None
:class MyModel(models.Model): title = LocalizedField(blank=False, null=False, required=False)
Make specific languages required:
class MyModel(models.Model): title = LocalizedField(blank=False, null=False, required=['en', 'ro'])
Make all languages required:
class MyModel(models.Model): title = LocalizedField(blank=False, null=False, required=True)
Uniqueness¶
Note
Uniqueness is enforced by PostgreSQL by creating unique indexes on hstore keys. Keep this in mind when setting up unique constraints. If you already have a unique constraint in place, you do not have to add an additional index as uniqueness is enforced by creating an index.
Enforce uniqueness for one or more languages:
class MyModel(models.Model): title = LocalizedField(uniqueness=['en', 'ro'])
Enforce uniqueness for all languages:
from localized_fields.util import get_language_codes class MyModel(models.Model): title = LocalizedField(uniqueness=get_language_codes())
Enforce uniqueness for one or more languages together:
class MyModel(models.Model): title = LocalizedField(uniqueness=[('en', 'ro')])
This is similar to Django’s unique_together.
Enforce uniqueness for all languages together:
from localized_fields.util import get_language_codes class MyModel(models.Model): title = LocalizedField(uniqueness=[(*get_language_codes())])