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

RuntimeError: dictionary keys changed during iteration

Open jpic opened this issue 4 years ago • 1 comments

With this code:

class Industry(TranslationModel):
    name = models.CharField(max_length=255)
    profession_set = models.ManyToManyField(
        'Profession',
        through='IndustryProfession',
    )

    def __str__(self):
        return self.name

    class Meta:
        translatable_fields = ('name',)

Getting a shell exception:

In [5]: Industry.objects.language('fr').filter(name='Armement')                                                                                     
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-5-6ae5df24159f> in <module>
----> 1 Industry.objects.language('fr').filter(name='Armement')

~/.local/lib/python3.8/site-packages/nece/managers.py in filter(self, *args, **kwargs)
     80     def filter(self, *args, **kwargs):
     81         if not self.is_default_language(self._language_code):
---> 82             for key, value in kwargs.items():
     83                 if key.split('__')[0] in self.model._meta.translatable_fields:
     84                     del kwargs[key]

RuntimeError: dictionary keys changed during iteration

Not sure what I'm doing wrong, also got some weird results here:


In [14]: Industry.objects.filter(name='Armament').first().translations                                                                              
Out[14]: {'name': {'en': 'Armament', 'fr': 'Armement'}}

In [15]: test = Industry.objects.filter(name='Armament').first()                                                                                    

In [16]: test.language('fr')                                                                                                                        
Out[16]: <Industry: Armament>

In [17]: test.name                                                                                                                                  
Out[17]: 'Armament'   <-------------- not the fr translation

jpic avatar Jul 27 '20 00:07 jpic

#42 should fix this.

xavfernandez avatar Nov 06 '20 09:11 xavfernandez