姜戈 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)
我想为三种语言的 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)