我想将国际化添加到项目中,所以我使用django-modeltranslation app。但是,在完成配置和运行迁移的所有步骤后,当我进入我的管理员时,模型已注册,但是当我点击它时:
"您的数据库安装出了问题。确保已创建相应的数据库表,并确保相应用户可以读取数据库。"
这里是代码(请注意,为了清楚起见,我已将其全部放在文件中):
INSTALLED_APPS = [
'modeltranslation',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'nuggets',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'Trans',
'USER': 'postgres',
'PASSWORD': 'c1l2a3u4',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
gettext = lambda s: s
LANGUAGES = (
('en', gettext('English')),
('es', gettext('Spanish')),
)

#Models code
from django.db import models
class News(models.Model):
title = models.CharField(max_length=255)
text = models.TextField()
#Admin code
from django.contrib import admin
from .models import News
from modeltranslation.admin import TranslationAdmin
class NewsAdmin(TranslationAdmin):
pass
admin.site.register(News, NewsAdmin)
#translation.py code
from modeltranslation.translator import translator, TranslationOptions
from .models import News
class NewsTranslationOptions(TranslationOptions):
fields = ('title', 'text',)
translator.register(News, NewsTranslationOptions)

我在创建模型之前尝试过,使用默认的db,使用postgre ...似乎没什么用,请帮忙!
答案 0 :(得分:8)
我遇到了与django-modeltranslation类似的问题。 在Django 2.0.5中,当我打开管理面板时出错。
需要更新套餐:
pip install django-modeltranslation == 0.13-beta1
更新翻译:
python manage.py update_translation_fields
一切正常。
答案 1 :(得分:1)
OP正在使用django-modeltranslation
和Django
2.0。但是对于这个版本,他们的测试是currently failing。
在ugettext_lazy
中使用settings.py
以避免循环导入:
from django.utils.translation import ugettext_lazy as _
LANGUAGES = [
('en', _('English')),
('th', _('Thai')),
]
MODELTRANSLATION_DEFAULT_LANGUAGE = 'en'
MODELTRANSLATION_LANGUAGES = ('en', 'th')
在modeltranslation
默认值之后,尝试将INSTALLED_APPS
放在django
的末尾。
您是否已在其他地方注册过您的模型?您可以在再次注册之前尝试取消注册。
admin.site.unregister(News)
admin.site.register(News, NewsAdmin)
您是否按照文档中的说明使用python manage.py makemigration
执行了这些步骤?
答案 2 :(得分:0)
您是否尝试过the sync_translation_fields
Management Command?
此命令比较数据库和已翻译的模型定义(查找新的翻译字段)并提供SQL语句以更改表。您应该在向
settings.LANGUAGES
添加新语言或向已注册模型的TranslationOptions
添加新字段后运行此命令。
答案 3 :(得分:0)
看起来django-modeltranslation不能与django 2.0一起工作(至少对我来说和那里的安装程序)。但它与django 1.11有关。
答案 4 :(得分:0)
我的配置:Django 2.2.5,Python 3.7.4,bootstrap4-0.1.0
编辑〜/ anaconda3 / envs / django / lib / python3.7 / site-packages / modeltranslation / models.py,添加 on_delete = models.CASCADE
creator_user = models.ForeignKey(User, null=True, default=None, related_name='model_translation', verbose_name=u"User translator", help_text=u"User that created last translation version", on_delete=models.CASCADE,)
编辑/anaconda3/envs/django/lib/python3.7/site-packages/modeltranslation/migrations/0001_initial.py,添加 导入django.db.models.deletion 和 on_delete = django.db.models.deletion.CASCADE,
from django.db import models, migrations
import django.db.models.deletion
('creator_user', models.ForeignKey(related_name='model_translation', default=None, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, help_text='Usuario que ha realizado la \xfaltima traducci\xf3n', null=True, verbose_name='Usuario que ha realizado la traducci\xf3n')),
In settings.py
# ModelTranslation
IS_MONOLINGUAL=False
TRANSLATABLE_MODEL_MODULES = ["marketplace.models"]
使用您的应用名称进行修改, TRANSLATABLE_MODEL_MODULES = [“ .models”]
$ python manage.py makemigrations
$ python manage.py migrate
希望它也适用于您的情况。
答案 5 :(得分:0)
似乎不再以该特定库名称维护“modeltranslations”。而更高版本的 django 需要为模型设置 on_delete。ForeignKey
对我来说这是有效的:
pip uninstall modeltranslations
pip install django-modeltranslations
据我所知,它是同一个库,但您获得了更新的版本。就我而言,我根本不需要修改 settings.py。