django中带有modeltranslation的db出错

时间:2018-02-15 15:13:52

标签: python django django-modeltranslation

我想将国际化添加到项目中,所以我使用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)




] 2] 2

我在创建模型之前尝试过,使用默认的db,使用postgre ...似乎没什么用,请帮忙!

6 个答案:

答案 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-modeltranslationDjango 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。