姜戈 1.8.5。如何使用 get_language() 在我的应用程序的 admin.py 中定义 Model.Admin 中的用户语言?

Django 1.8.5. How can I define the user language in Model.Admin in the admin.py of my app using get_language()?

我想为三种语言的 django 创建一个包。我需要根据他的语言将数据从数据库显示给管理员。 我的模型:

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], '...'])

这是我未完成的 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())

因此 get_language() 方法在 phrase_author() 和 phrase_content() 中正常工作。我需要根据用户语言更改字段集和 phrase_author.admin_order_field,但它 returns 默认 'en-us',不是当前的。 可能我必须使用另一种方法吗?或者我做错了什么? 例如我想这样做:

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]

查看下面的代码:

from django.utils.translation import get_language_from_request

class RecordAdmin(admin.ModelAdmin):

  def changelist_view(self, request, extra_context=None):
    self.lng_id = get_language_from_request(request)
    return super(RecordAdmin, self).changelist_view(request, extra_context=extra_context)