django-modeltranslation icon indicating copy to clipboard operation
django-modeltranslation copied to clipboard

Django update_fields in save not updating associated languages

Open danigosa opened this issue 10 years ago • 1 comments

When using update_fields from documentation, when indicating it's a translatable name, it does not hook into the list adding proper fields:

On models.py:

class SomeModel(models.Model):
    name = models.TextField()

On translation.py:

class SomeModelTranslationOptions(TranslationOptions):
    fields = ('name',)

translator.register(SomeModel, SomeModelTranslationOptions)

On shell (with produced wrong SQL):

>>>  translation.activate('en')
>>>  some_model = SomeModel.objects.get(id=1)
>>>  some_model.name 
u'Something in English'
>>>  translation.activate('es')
>>>  some_model.name = "Algo en Español"
>>>  some_model.save()
(0.001) UPDATE "test_db_some_model" SET "name"="Something in English", "name_es" = 'Algo en español' WHERE "test_db_some_model"."id" = 1;
>>>  some_model.name = "Más en Español"
>>>  some_model.save(update_fields=['name'])
(0.001) UPDATE "test_db_some_model" SET "name"="Something in English" WHERE "test_db_some_model"."id" = 1;
>>>  some_model = SomeModel.objects.get(id=1)
>>>  some_model.name
u'Algo en Español'
>>>  translation.activate('en')
>>>  some_model.name
u'Something in English'
>>>  some_model.name = "Another thing in English"
>>>  some_model.save(update_fields=['name'])
>>>  some_model = SomeModel.objects.get(id=1)
>>>  some_model.name
u'Something in English'

As a result in database be have corrupted data in multilang fields:

test_db=# select name, name_en, name_es from test_db_some_model where user_id=1;
       name        |    name_en    |   name_es
-------------------+---------------+--------------
 Another thing in English | Something in English | Algo en Español

While correct would be something like:

test_db=# select name, name_en, name_es from test_db_some_model where user_id=1;
       name        |    name_en    |   name_es
-------------------+---------------+--------------
 Another thing in English | Another thing in English | Más en Español

Why MultilingualQuerySet is not taking care of update_fields to properly populate correct translated fields? That should be managed by the manager, not developer (to avoid errors).

danigosa avatar Oct 25 '15 12:10 danigosa

Same problem

blackboxx avatar Jun 04 '18 13:06 blackboxx