I want to create a package for django on three languages. And I need to show data from db to admin depending on his 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 not finished 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())
So the method get_language() is working properly in the phrase_author(), and phrase_content(). I need to change fieldsets and phrase_author.admin_order_field depending on user language but it returns the default 'en-us', not current. May be I must to use another method? Or what I'm doing wrong? For example I want to do like this:
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]