在 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-modeltranslation
和 Django
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.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
希望它也适用于您的情况。
“modeltranslations”似乎不再以该特定库名称进行维护。而更高版本的 django 需要为 models.ForeignKey
设置 on_delete
对我来说这很有效:
pip uninstall modeltranslations
pip install django-modeltranslations
据我所知,它是同一个库,但你得到了更新的版本。就我而言,我根本不需要修改 settings.py。
我想给一个项目添加国际化,所以我使用了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-modeltranslation
和 Django
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 theTranslationOptions
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.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
希望它也适用于您的情况。
“modeltranslations”似乎不再以该特定库名称进行维护。而更高版本的 django 需要为 models.ForeignKey
设置 on_delete对我来说这很有效:
pip uninstall modeltranslations
pip install django-modeltranslations
据我所知,它是同一个库,但你得到了更新的版本。就我而言,我根本不需要修改 settings.py。