Python 可以在admin之外使用django modeltranslation吗?
我在Django 1.11项目中使用该应用程序。我成功地安装了应用程序并进行了设置,还按照文档中的建议注册了翻译模型 问题:是否可以在管理员之外使用此应用程序?如果可能的话,我需要做什么 translation.py:Python 可以在admin之外使用django modeltranslation吗?,python,django,python-3.x,django-1.11,django-modeltranslation,Python,Django,Python 3.x,Django 1.11,Django Modeltranslation,我在Django 1.11项目中使用该应用程序。我成功地安装了应用程序并进行了设置,还按照文档中的建议注册了翻译模型 问题:是否可以在管理员之外使用此应用程序?如果可能的话,我需要做什么 translation.py: class ArticleTranslationOptions(TranslationOptions): fields = ('title', 'body',) translator.register(Article, ArticleTranslationOptions
class ArticleTranslationOptions(TranslationOptions):
fields = ('title', 'body',)
translator.register(Article, ArticleTranslationOptions)
LANGUAGE_CODE = 'ru'
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
('de', _('German')),
)
MODELTRANSLATION_LANGUAGES = ('en', 'de')
from modeltranslation.forms import TranslationModelForm
class ArticleForm(TranslationModelForm):
"""
Form based on "Article" model.
"""
class Meta:
model = Article
fields = ('title', 'title_en', 'title_de', 'body', 'body_en', 'body_de',)
def __init__(self, *args, **kwargs):
super(ArticleForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs = {
'class': 'form-control',
'id': 'title',
}
self.fields['title_en'].widget.attrs = {
'class': 'form-control',
'id': 'title_en',
}
self.fields['title_de'].widget.attrs = {
'class': 'form-control',
'id': 'title_de',
}
self.fields['body'].widget.attrs = {
'class': 'form-control',
'id': 'opt_head',
}
self.fields['body_en'].widget.attrs = {
'class': 'form-control',
'id': 'body_en',
}
self.fields['body_de'].widget.attrs = {
'class': 'form-control',
'id': 'body_de',
}
Traceback (most recent call last):
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
response = get_response(request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\Nurzhan\PycharmProjects\CA\slider\views.py", line 41, in get
slide_create_form = SlideForm()
File "C:\Users\Nurzhan\PycharmProjects\CA\slider\forms.py", line 29, in __init__
'id': 'title_en',
KeyError: 'title_en'
设置。py:
class ArticleTranslationOptions(TranslationOptions):
fields = ('title', 'body',)
translator.register(Article, ArticleTranslationOptions)
LANGUAGE_CODE = 'ru'
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
('de', _('German')),
)
MODELTRANSLATION_LANGUAGES = ('en', 'de')
from modeltranslation.forms import TranslationModelForm
class ArticleForm(TranslationModelForm):
"""
Form based on "Article" model.
"""
class Meta:
model = Article
fields = ('title', 'title_en', 'title_de', 'body', 'body_en', 'body_de',)
def __init__(self, *args, **kwargs):
super(ArticleForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs = {
'class': 'form-control',
'id': 'title',
}
self.fields['title_en'].widget.attrs = {
'class': 'form-control',
'id': 'title_en',
}
self.fields['title_de'].widget.attrs = {
'class': 'form-control',
'id': 'title_de',
}
self.fields['body'].widget.attrs = {
'class': 'form-control',
'id': 'opt_head',
}
self.fields['body_en'].widget.attrs = {
'class': 'form-control',
'id': 'body_en',
}
self.fields['body_de'].widget.attrs = {
'class': 'form-control',
'id': 'body_de',
}
Traceback (most recent call last):
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
response = get_response(request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\Nurzhan\PycharmProjects\CA\slider\views.py", line 41, in get
slide_create_form = SlideForm()
File "C:\Users\Nurzhan\PycharmProjects\CA\slider\forms.py", line 29, in __init__
'id': 'title_en',
KeyError: 'title_en'
forms.py:
class ArticleTranslationOptions(TranslationOptions):
fields = ('title', 'body',)
translator.register(Article, ArticleTranslationOptions)
LANGUAGE_CODE = 'ru'
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
('de', _('German')),
)
MODELTRANSLATION_LANGUAGES = ('en', 'de')
from modeltranslation.forms import TranslationModelForm
class ArticleForm(TranslationModelForm):
"""
Form based on "Article" model.
"""
class Meta:
model = Article
fields = ('title', 'title_en', 'title_de', 'body', 'body_en', 'body_de',)
def __init__(self, *args, **kwargs):
super(ArticleForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs = {
'class': 'form-control',
'id': 'title',
}
self.fields['title_en'].widget.attrs = {
'class': 'form-control',
'id': 'title_en',
}
self.fields['title_de'].widget.attrs = {
'class': 'form-control',
'id': 'title_de',
}
self.fields['body'].widget.attrs = {
'class': 'form-control',
'id': 'opt_head',
}
self.fields['body_en'].widget.attrs = {
'class': 'form-control',
'id': 'body_en',
}
self.fields['body_de'].widget.attrs = {
'class': 'form-control',
'id': 'body_de',
}
Traceback (most recent call last):
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
response = get_response(request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\Nurzhan\PycharmProjects\CA\slider\views.py", line 41, in get
slide_create_form = SlideForm()
File "C:\Users\Nurzhan\PycharmProjects\CA\slider\forms.py", line 29, in __init__
'id': 'title_en',
KeyError: 'title_en'
错误:
class ArticleTranslationOptions(TranslationOptions):
fields = ('title', 'body',)
translator.register(Article, ArticleTranslationOptions)
LANGUAGE_CODE = 'ru'
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
('de', _('German')),
)
MODELTRANSLATION_LANGUAGES = ('en', 'de')
from modeltranslation.forms import TranslationModelForm
class ArticleForm(TranslationModelForm):
"""
Form based on "Article" model.
"""
class Meta:
model = Article
fields = ('title', 'title_en', 'title_de', 'body', 'body_en', 'body_de',)
def __init__(self, *args, **kwargs):
super(ArticleForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs = {
'class': 'form-control',
'id': 'title',
}
self.fields['title_en'].widget.attrs = {
'class': 'form-control',
'id': 'title_en',
}
self.fields['title_de'].widget.attrs = {
'class': 'form-control',
'id': 'title_de',
}
self.fields['body'].widget.attrs = {
'class': 'form-control',
'id': 'opt_head',
}
self.fields['body_en'].widget.attrs = {
'class': 'form-control',
'id': 'body_en',
}
self.fields['body_de'].widget.attrs = {
'class': 'form-control',
'id': 'body_de',
}
Traceback (most recent call last):
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
response = get_response(request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\Nurzhan\PycharmProjects\CA\slider\views.py", line 41, in get
slide_create_form = SlideForm()
File "C:\Users\Nurzhan\PycharmProjects\CA\slider\forms.py", line 29, in __init__
'id': 'title_en',
KeyError: 'title_en'
我也遇到了同样的错误,遇到了这个问题。但后来我找到了答案 您正在使用
TranslationModelForm
扩展表单,而必须使用Django的ModelForm
扩展表单。因为正如TranslationModelForm
中提到的那样,删除了所有翻译字段
这里需要注意的一件重要事情是,无论您希望以何种形式显示翻译字段,都必须手动将其添加到字段中,例如,title\u en
,title\u de
,title\u ru
等
from django.forms import ModelForm
class ArticleForm(ModelForm):
class Meta:
model = Article
fields = ('title', 'title_en', 'title_de', 'body', 'body_en', 'body_de',)
管理应用程序是可选的django翻译,所以很明显,你可以使用它没有管理。文档指定了如何注册模型和访问翻译后的数据。谢谢你的链接!你能给我一个小例子如何在一个模板中显示不同的语言翻译吗?同样在文档中,我注意到ModelForm部分。这意味着我可以编辑这些翻译。对吗?我想你可以编辑,但你需要管理员。对于不同的翻译,您可以在设置中指定语言,然后在模型中为不同的语言创建字段,如title将是title\u en或title\u de或其他一些语言我对编写模式(创建/编辑表单)感兴趣。你能再查一下邮件吗。这段代码够了吗,还是我需要做点别的?我有这个代码的下一个错误。你能说什么不对吗@ArpitSolanki当我尝试使用ModelForms而不是TranslationModelForm时,它显示在表单字段中:标题和正文。如何在表单中显示其他字段?