3

我想为项目添加国际化,所以我使用 django-modeltranslation 应用程序。但是,在完成配置和运行迁移的所有步骤之后,当我进入我的管理员时,模型已注册,但是当我单击它时:

“您的数据库安装有问题。确保已创建适当的数据库表,并确保适当的用户可以读取数据库。”

这是代码(请注意,为清楚起见,我已将其全部放在文件中):

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)

] 2 ] 2

我在创建模型之前尝试过,之后使用默认数据库,使用 postgre ......似乎没有任何工作,请帮助!

4

6 回答 6

8

我对 django-modeltranslation 有类似的问题。在 Django 2.0.5 中,当我打开管理面板时出现错误。

需要更新包:

pip install django-modeltranslation==0.13-beta1

更新翻译:

python manage.py update_translation_fields

一切正常。

于 2018-06-07T10:35:49.103 回答
1

OPdjango-modeltranslationDjango2.0 一起使用。但是他们的测试目前在这个版本上失败了。


用于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您是否按照文档中所述的步骤进行操作?

于 2018-02-15T15:23:06.217 回答
0

您是否尝试sync_translation_fields管理命令

此命令比较数据库和翻译模型定义(查找新翻译字段)并提供 SQL 语句来更改表。您应该在向您的注册模型添加新语言settings.LANGUAGES或向注册模型的新字段添加新字段后运行此命令TranslationOptions

于 2018-02-15T15:36:09.937 回答
0

看起来 django-modeltranslation 不适用于 django 2.0(至少对我和那里的安装过程而言)。但它适用于 django 1.11。

于 2018-02-16T12:53:33.940 回答
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,添加 import django.db.models.deletionon_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

希望它也适用于您的情况。

于 2019-10-28T04:14:26.893 回答
0

似乎不再以该特定库名称维护“模型翻译”。以及更高版本的django需要为models.ForeignKey设置on_delete

对我来说,这很有效:

pip uninstall modeltranslations
pip install django-modeltranslations

据我所知,它是同一个库,但你得到了一个更新的版本。就我而言,我根本不需要修改 settings.py。

于 2021-05-14T09:36:35.360 回答