325 lines
7.2 KiB
Python
325 lines
7.2 KiB
Python
from django.conf import settings
|
|
from django.contrib.auth.models import Group
|
|
from django.utils.translation import gettext_lazy
|
|
|
|
from modeltranslation.tests import models
|
|
from modeltranslation.tests.models import InheritedPermission
|
|
from modeltranslation.translator import TranslationOptions, register, translator
|
|
|
|
|
|
@register(models.TestModel)
|
|
class TestTranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"title",
|
|
"text",
|
|
"url",
|
|
"email",
|
|
"dynamic_default",
|
|
)
|
|
empty_values = ""
|
|
|
|
|
|
@register(models.UniqueNullableModel)
|
|
class UniqueNullableTranslationOptions(TranslationOptions):
|
|
fields = ("title",)
|
|
|
|
|
|
@register(models.ModelWithConstraint)
|
|
class ModelWithConstrainTranslationOptions(TranslationOptions):
|
|
fields = ("sub_title",)
|
|
|
|
|
|
# ######### Proxy model testing
|
|
|
|
|
|
@register(models.ProxyTestModel)
|
|
class ProxyTestTranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"title",
|
|
"text",
|
|
"url",
|
|
"email",
|
|
)
|
|
|
|
|
|
# ######### Fallback values testing
|
|
|
|
|
|
@register(models.FallbackModel)
|
|
class FallbackModelTranslationOptions(TranslationOptions):
|
|
fields = ("title", "text", "url", "email", "description")
|
|
fallback_values = "fallback"
|
|
|
|
|
|
@register(models.FallbackModel2)
|
|
class FallbackModel2TranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"title",
|
|
"text",
|
|
"url",
|
|
"email",
|
|
)
|
|
fallback_values = {"text": gettext_lazy("Sorry, translation is not available.")}
|
|
fallback_undefined = {"title": "no title"}
|
|
|
|
|
|
# ######### File fields testing
|
|
|
|
|
|
@register(models.FileFieldsModel)
|
|
class FileFieldsModelTranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"title",
|
|
"file",
|
|
"file2",
|
|
"image",
|
|
)
|
|
|
|
|
|
# ######### Foreign Key / OneToOneField / ManytoManyField testing
|
|
|
|
|
|
@register(models.ForeignKeyModel)
|
|
class ForeignKeyModelTranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"title",
|
|
"test",
|
|
"optional",
|
|
"hidden",
|
|
"non",
|
|
)
|
|
|
|
|
|
@register(models.OneToOneFieldModel)
|
|
class OneToOneFieldModelTranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"title",
|
|
"test",
|
|
"optional",
|
|
"non",
|
|
)
|
|
|
|
|
|
@register(models.FilteredTestModel)
|
|
class FilteredTestModelTranslationOptions(TranslationOptions):
|
|
fields = ("title",)
|
|
|
|
|
|
@register(models.ForeignKeyFilteredModel)
|
|
class ForeignKeyFilteredModelTranslationOptions(TranslationOptions):
|
|
fields = ("title",)
|
|
|
|
|
|
@register(models.ManyToManyFieldModel)
|
|
class ManyToManyFieldModelTranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"title",
|
|
"test",
|
|
"self_call_1",
|
|
"self_call_2",
|
|
"through_model",
|
|
"trans_through_model",
|
|
"untrans",
|
|
)
|
|
|
|
|
|
@register(models.RegisteredThroughModel)
|
|
class RegisteredThroughModelTranslationOptions(TranslationOptions):
|
|
fields = ("title",)
|
|
|
|
|
|
# ######### Custom fields testing
|
|
|
|
|
|
@register(models.OtherFieldsModel)
|
|
class OtherFieldsModelTranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"int",
|
|
"boolean",
|
|
"float",
|
|
"decimal",
|
|
"genericip",
|
|
"date",
|
|
"datetime",
|
|
"time",
|
|
"json",
|
|
)
|
|
|
|
|
|
@register(models.DescriptorModel)
|
|
class DescriptorModelTranslationOptions(TranslationOptions):
|
|
fields = ("trans",)
|
|
|
|
|
|
# ######### Multitable inheritance testing
|
|
|
|
|
|
@register(models.MultitableModelA)
|
|
class MultitableModelATranslationOptions(TranslationOptions):
|
|
fields = ("titlea",)
|
|
|
|
|
|
@register(models.MultitableModelB)
|
|
class MultitableModelBTranslationOptions(TranslationOptions):
|
|
fields = ("titleb",)
|
|
|
|
|
|
@register(models.MultitableModelC)
|
|
class MultitableModelCTranslationOptions(TranslationOptions):
|
|
fields = ("titlec",)
|
|
|
|
|
|
# ######### Abstract inheritance testing
|
|
|
|
|
|
@register(models.AbstractModelA)
|
|
class AbstractModelATranslationOptions(TranslationOptions):
|
|
fields = ("titlea",)
|
|
|
|
|
|
@register(models.AbstractModelB)
|
|
class AbstractModelBTranslationOptions(TranslationOptions):
|
|
fields = ("titleb",)
|
|
|
|
|
|
# ######### Fields inheritance testing
|
|
|
|
|
|
class SluggedTranslationOptions(TranslationOptions):
|
|
fields = ("slug",)
|
|
|
|
|
|
class MetaDataTranslationOptions(TranslationOptions):
|
|
fields = ("keywords",)
|
|
|
|
|
|
class RichTextTranslationOptions(TranslationOptions):
|
|
fields = ("content",)
|
|
|
|
|
|
class PageTranslationOptions(TranslationOptions):
|
|
fields = ("title",)
|
|
|
|
|
|
# BasePage left unregistered intentionally.
|
|
translator.register(models.Slugged, SluggedTranslationOptions)
|
|
translator.register(models.MetaData, MetaDataTranslationOptions)
|
|
translator.register(models.RichText, RichTextTranslationOptions)
|
|
translator.register(models.Displayable)
|
|
translator.register(models.Page, PageTranslationOptions)
|
|
translator.register(models.RichTextPage)
|
|
|
|
|
|
# ######### Manager testing
|
|
|
|
|
|
@register(models.ManagerTestModel)
|
|
class ManagerTestModelTranslationOptions(TranslationOptions):
|
|
fields = ("title", "visits", "description")
|
|
|
|
|
|
@register(
|
|
[
|
|
models.CustomManagerTestModel,
|
|
models.CustomManager2TestModel,
|
|
models.CustomManagerChildTestModel,
|
|
models.PlainChildTestModel,
|
|
]
|
|
)
|
|
class CustomManagerTestModelTranslationOptions(TranslationOptions):
|
|
fields = ("title",)
|
|
|
|
|
|
# ######### TranslationOptions field inheritance testing
|
|
|
|
|
|
class FieldInheritanceATranslationOptions(TranslationOptions):
|
|
fields = ["titlea"]
|
|
|
|
|
|
class FieldInheritanceBTranslationOptions(FieldInheritanceATranslationOptions):
|
|
fields = ["titleb"]
|
|
|
|
|
|
class FieldInheritanceCTranslationOptions(FieldInheritanceBTranslationOptions):
|
|
fields = ["titlec"]
|
|
|
|
|
|
class FieldInheritanceDTranslationOptions(FieldInheritanceBTranslationOptions):
|
|
fields = ["titled"]
|
|
|
|
|
|
class FieldInheritanceETranslationOptions(
|
|
FieldInheritanceCTranslationOptions, FieldInheritanceDTranslationOptions
|
|
):
|
|
fields = ["titlee"]
|
|
|
|
|
|
# ######### Integration testing
|
|
|
|
|
|
@register(models.ThirdPartyRegisteredModel)
|
|
class ThirdPartyTranslationOptions(TranslationOptions):
|
|
fields = ("name",)
|
|
|
|
|
|
# ######### Admin testing
|
|
|
|
|
|
@register(models.GroupFieldsetsModel)
|
|
class GroupFieldsetsTranslationOptions(TranslationOptions):
|
|
fields = (
|
|
"title",
|
|
"text",
|
|
)
|
|
|
|
|
|
@register(models.NameModel)
|
|
class NameTranslationOptions(TranslationOptions):
|
|
fields = ("firstname", "lastname", "slug2")
|
|
|
|
|
|
# ######### Required fields testing
|
|
|
|
|
|
@register(models.RequiredModel)
|
|
class RequiredTranslationOptions(TranslationOptions):
|
|
fields = ("non_req", "req", "req_reg", "req_en_reg")
|
|
required_languages = {
|
|
"en": (
|
|
# We include `non_req` field here, to test that it's `blank` attribute is preserved,
|
|
# even when languages is required.
|
|
"non_req",
|
|
"req_reg",
|
|
"req_en_reg",
|
|
),
|
|
"default": ("req_reg",), # for all other languages
|
|
}
|
|
|
|
|
|
# ######### Complex M2M with abstract classes and custom managers
|
|
|
|
|
|
@register(models.ModelX)
|
|
class ModelXOptions(TranslationOptions):
|
|
fields = ("name",)
|
|
|
|
|
|
@register(models.ModelY)
|
|
class ModelYOptions(TranslationOptions):
|
|
fields = ("title",)
|
|
|
|
|
|
# ######### 3-rd party with custom manager
|
|
|
|
|
|
@register(Group)
|
|
class GroupTranslationOptions(TranslationOptions):
|
|
fields = ("name",)
|
|
|
|
|
|
@register(InheritedPermission)
|
|
class InheritedPermissionOptions(TranslationOptions):
|
|
fields = ("translated_var",)
|
|
required_languages = [x[0] for x in settings.LANGUAGES]
|