django-modeltranslation
django-modeltranslation copied to clipboard
Django update_fields in save not updating associated languages
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).
Same problem