I want to create a package for django in three languages. And I need to show data from db to administrator depending on its language. My model:
class Author(models.Model):
name_en = models.CharField(max_length=200, default='No name')
name_ua = models.CharField(max_length=200, default='No name')
name_ru = models.CharField(max_length=200, default='No name')
biography_en = models.TextField(default='No biography')
biography_ua = models.TextField(default='No biography')
biography_ru = models.TextField(default='No biography')
def __str__(self):
lang = get_language()
if lang == 'ru':
author = self.name_ru
elif lang == 'ua':
author = self.name_ua
else:
author = self.name_en
return author
class Phrases(models.Model):
phrase_en = models.TextField(default='No phrase')
phrase_ua = models.TextField(default='No phrase')
phrase_ru = models.TextField(default='No phrase')
author = models.ForeignKey(Author)
PHRASE_STATUS = (
('published', 'Published'),
('draft', 'Draft'),
('unpublished', 'Unpublished'),
)
showed = models.BooleanField(default=False)
phrase_status = models.CharField(max_length=11, choices=PHRASE_STATUS, default='published')
pub_date = models.DateTimeField('Date published', auto_now_add=True)
def __str__(self):
return ''.join([self.phrase_en[:30], '...'])
And here is my unfinished admin.py
from django.utils.translation import get_language
class PhilosophyAllPhrases(admin.ModelAdmin):
model = Phrases
actions_on_bottom = True
actions_on_top = True
actions_selection_counter = True
date_hierarchy = 'pub_date'
lang = get_language()
fieldsets = [
(
'English', {
'fields': ['phrase_en'],
'classes': ['collapses']
}
), (
'Russian', {
'fields': ['phrase_ru'],
'classes': ['collapses']
}
), (
'Ukraine', {
'fields': ['phrase_ua'],
'classes': ['collapses']
}
), (
'Settings', {
'fields': ['author', 'phrase_status']
}
)
]
list_display = ('phrase_content', 'phrase_author', 'phrase_status')
def phrase_author(self, obj):
self.lang = get_language()
if self.lang == 'ru':
author = obj.author.name_ru
elif self.lang == 'ua':
author = obj.author.name_ua
else:
author = obj.author.name_en
return format_html('<span class="pp_author">%s</span>' % author)
def phrase_content(self, obj):
self.lang = get_language()
if self.lang == 'ru':
phrase = obj.phrase_ru
elif self.lang == 'ua':
phrase = obj.phrase_ua
else:
phrase = obj.phrase_en
return format_html(('%s...' % phrase[:100]).upper())
Thus, the get_language () method works correctly in the author () phrase and the content () phrase. I need to change the fields and phrase_author.admin_order_field depending on the user's language, but it returns the default value of "en-us", not current. Maybe I should use a different method? Or what am I doing wrong? For example, I want to do the following:
lang = get_language()
if lang == 'ru':
phrase = (
'', {
'fields': ['phrase_ru'],
'classes': ['collapses']
}
)
elif lang == 'en':
phrase = (
'Phrase', {
'fields': ['phrase_en'],
'classes': ['collapses']
}
)
settings = (
'Settings', {
'fields': ['author', 'phrase_status']
}
)
fieldsets = [phrase, settings]