繁体   English   中英

django 中模型翻译的 db 错误

[英]Error in db with modeltranslation in django

我想为项目添加国际化,所以我使用 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 ......似乎没有任何效果,请帮忙!

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

需要更新包:

pip install django-modeltranslation==0.13-beta1

更新翻译:

python manage.py update_translation_fields

一切正常。

OP 在Django 2.0 中使用django-modeltranslation 但是他们的测试目前在这个版本上失败了。


settings.py使用ugettext_lazy以避免循环导入:

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执行步骤?

您是否尝试sync_translation_fields管理命令

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

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

我的配置: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

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

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

对我来说这有效:

pip uninstall modeltranslations
pip install django-modeltranslations

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM