1

私はモデル変換が初めてで、問題があります。モデルを作成し、モデル翻訳アプリmanage.py syncdbで翻訳するフィールドを登録した後にコマンドを実行すると、翻訳されたフィールドがモデルに追加されません。translation.pyただし、フィールドはテーブルにあります。そのため、Python シェルでオブジェクトを作成するとdisplay_en、エラーが発生するためアクセスできません

AttributeError: 'Content' object has no attribute 'display_en'

私のsettings.py:

    DEBUG = True
    TEMPLATE_DEBUG = DEBUG

    ADMINS = (
         # ('Your Name', 'your_email@example.com'),
    )

    MANAGERS = ADMINS

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'test_db',                      # Or path to database file if using sqlite3.
            'USER': 'postgres',                      # Not used with sqlite3.
            'PASSWORD': 'admin',                  # Not used with sqlite3.
            'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
            'PORT': '5432',                      # Set to empty string for default. Not used with sqlite3.
          }
     }


     SITE_ID = 1

     TIME_ZONE = 'UTC'
     LANGUAGE_CODE = 'fr-fr'

     ugettext = lambda s: s

     LANGUAGES = ( 
          ('fr', ugettext('French')),
          ('en', ugettext('English')),
          ('ja', ugettext('Japanese')),
     )


     USE_I18N = True


     TEMPLATE_CONTEXT_PROCESSORS = (
     'django.core.context_processors.auth',
     'django.core.context_processors.debug',
     'django.core.context_processors.i18n',
     )

     USE_L10N = True
     USE_TZ = True

     STATICFILES_FINDERS = (
       'django.contrib.staticfiles.finders.FileSystemFinder',
       'django.contrib.staticfiles.finders.AppDirectoriesFinder',
       # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
    )

   # List of callables that know how to import templates from various sources.
   TEMPLATE_LOADERS = (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    )

   MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
   )

   ROOT_URLCONF = 'mysite.urls'


   TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
  )

   INSTALLED_APPS = (
       'django.contrib.auth',
       'django.contrib.contenttypes',
       'django.contrib.sessions',
       'django.contrib.sites',
       'django.contrib.messages',
       'django.contrib.staticfiles',
       'tagging',
       #'social_auth',
       'south',
       'django.contrib.admin',
       'sorl.thumbnail',
       'modeltranslation',
       'myapp',
       # Uncomment the next line to enable admin documentation:
       # 'django.contrib.admindocs',
     )

     TRANSLATION_REGISTRY = "myapp.translation" 

私の models.py :

    from django.db import models
    from django.utils.translation import ugettext_lazy as _
    from django.conf import settings

    class Test(models.Model):
        display = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('test.display'))
        url = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('test.url'))

私の translation.py :

    from modeltranslation.translator import translator, TranslationOptions

    from myapp.models import Test


    class TestTranslationOptions(TranslationOptions):
        fields = ('display')

    translator.register(Test, TestTranslationOptions)
4

2 に答える 2

1

modeltranslationはまったくロードされますか?開発サーバーを使用すると、manage.py runserverデバッグ情報がに出力されstdoutます。

Validating models...

modeltranslation: Registered 2 models for translation (Foo, Bar) [pid:12345].
0 errors found
[...]

これが表示されない場合(および非アクティブ化されていない場合DEBUG)、インポート時に問題が発生したと考えられます。

また、どのmodeltranslationバージョンを使用していますか?

TRANSLATION_REGISTRY一貫性のあるプレフィックスに切り替えられた0.3以降、この設定は廃止されたため、になりましMODELTRANSLATION_TRANSLATION_REGISTRYた。

0.4では、アプリごとのレベルの翻訳ファイルが導入され、この設定は完全にオプションになりました。translation.py代わりに、各アプリはルートディレクトリで自動的に検索されるようになりました。同時にMODELTRANSLATION_TRANSLATION_FILES追加されました。また、オプションであるため、翻訳ファイルのリストを拡張できます。

下位互換性を維持するために、最新の開発バージョンでもサポートMODELTRANSLATION_TRANSLATION_REGISTRYは維持されていますが、これを使用することは推奨されなくなりました。代わりに、translation.py翻訳したいアプリのディレクトリにを入れてください。

最後に、のfields属性はtranslation.py、文字列を定義しているタプル(またはリスト)であると想定されています。Pythonは、次のようにコンマを追加した場合にのみ、タプルとして認識します。

class TestTranslationOptions(TranslationOptions):
    fields = ('display',)

modeltranslationフィールドが見つからない場合は救済する予定なので、あなたの質問のタイプミスだと思います。

于 2013-01-19T16:03:32.357 に答える
1

あなたは南を使用しているので、フィールドを翻訳するには ./manage.py migrate を実行する必要があります。この助けを願っています

于 2013-08-29T18:06:30.967 に答える