Migrating from django-modeltranslation

This is how to migrate from django-modeltranslation (version 0.12.1) to django-modeltrans:

  1. Make sure you have a recent backup available!

  2. Add modeltrans to your INSTALLED_APPS

  3. Add the TranslationField to the models you want to translate and keep the registrations for now. In order to prevent field name collisions, disable the virtual fields in django-modeltrans for now (virtual_fields=False):

    # models.py
    from django.db import models
    from modeltrans.fields import TranslationField
    
    class Blog(models.Model):
        title = models.CharField(max_length=255)
        body = models.TextField(null=True)
    
        # add this field, containing the TranslationOptions attributes as arguments:
        i18n = TranslationField(fields=('title', 'body'), virtual_fields=False)
    
    
    # translation.py
    from modeltranslation.translator import translator, TranslationOptions
    from .models import Blog
    
    class BlogTranslationOptions(TranslationOptions):
        fields = ('name', 'title', )
    
    translator.register(Blog, BlogTranslationOptions)
    
  4. Run ./manage.py makemigrations. This will create the migration adding the i18n-fields required by django-modeltrans. Apply them with /manage.py migrate

  5. We need to create a migration to copy the values of the translated fields into the newly created i18n-field. django-modeltrans provides a management command to do that ./manage.py i18n_makemigrations

  6. Now, remove django-modeltranslation by: - Remove modeltranslation from INSTALLED_APPS. - Remove all translation.py files from your apps. - Remove the use of modeltranslation.admin.TranslationAdmin in your admin.py’s

  7. Run ./manage.py makemigrations. This will remove the translated fields from your registered models.

  8. Update your code: use the <field>_i18n field in places where you would use <field> with django-modeltranslation. Less magic, but explicit is better than implicit!