воскресенье, 3 апреля 2011 г.

Затычки к django-multilingual-ng

Из всех "многоязычных" решений на Django самым внятным мне показался django-multilingual-ng, от авторов django CMS. Сама django CMS по смыслу не очень подошла для текущего проекта, поэтому было принято решение сделать своё решение, позаимствовав часть идей из django CMS.
То, что django-multilingual-ng написано под django CMS, к сожалению, дало неприятный косяк в том, что оно "из коробки" не другит с FeinCMS. Причём в тикете автор говорит - используйте лучше django CMS, что довольно странно, если мне нужен всего-лишь UI для редактирования mptt-деревьев.
Понадобилось тут ещё добавить некоторое удобство - чтоб в админке словарики (многоязычные) были по алфавиту отсортированы (в соответствии с текущим языком, конечно).
Поле ordering для ModelAdmin, естественно, не подходит, ибо переводы лежат в отдельной таблице и поля разные для разных языков получаются.
Поковырявшись в джанге получился вот примерно такой велосипедик:
class NameMultilingualAdmin(MultilingualModelAdmin):
    list_display = ('name',)

    @gll
    def get_changelist(self, request):
        field = 'name_%s' % GLL.language_code
        from django.contrib.admin.views.main import ChangeList
        
        class NameOrderedChangelist(ChangeList):
            def get_ordering(self):
                return (field, 'asc')

        return NameOrderedChangelist