在 django 中使用模型转换时数据库出错

Error in db with modeltranslation in django

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

"Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."

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

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...似乎没有任何效果,请帮忙!

OP 使用 django-modeltranslationDjango 2.0。但是他们的测试是currently failing这个版本。


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

你试过了吗the sync_translation_fields Management Command

This command compares the database and translated models definitions (finding new translation fields) and provides SQL statements to alter tables. You should run this command after adding a new language to your settings.LANGUAGES or a new field to the TranslationOptions of a registered model.

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

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

需要更新包:

pip install django-modeltranslation==0.13-beta1

更新翻译:

python manage.py update_translation_fields

一切正常。

我的配置:Django 2.2.5,Python3.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.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

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

“modeltranslations”似乎不再以该特定库名称进行维护。而更高版本的 django 需要为 models.ForeignKey

设置 on_delete

对我来说这很有效:

pip uninstall modeltranslations
pip install django-modeltranslations

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