2

モデル クラスの既存のフィールドを翻訳しようとしています。TranslatableModelでクラスをサブクラス化しCategory、ラッパーを追加TranslatedFieldsして選択したモデルフィールドを変換する最初のステップで行き詰まりました。私は本「Django by Example」とその方法に関するdjango-parlerの指示に従っていますが、次のエラーが発生しています:

File ..../env/lib/python3.5/site-packages/parler/models.py", line 965, in contribute_translations
raise TypeError("The model '{0}' already has a field named '{1}'".format(shared_model.__name__, name))
TypeError: The model 'Category' already has a field named 'name'

django-parler を適用する前に:

# models.py
class Category(models.Model):
    name = models.CharField(max_length=200,
                            db_index=True)
    slug = models.SlugField(max_length=200,
                            unique=True)
    class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('shop:product_list_by_category',
                       args=[self.slug])

django-parler を適用した後:

# models.py
class Category(TranslatableModel):
    name = models.CharField(max_length=200,
                            db_index=True)
    slug = models.SlugField(max_length=200,
                            unique=True)
    translations = TranslatedFields(
        name = models.CharField(max_length=200,
                                db_index=True),
        slug = models.SlugField(max_length=200,
                                unique=True),
    )
    class Meta:
        # ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('shop:product_list_by_category',
                       args=[self.slug])
4

2 に答える 2

0

Antonio Meleによる「Django by Example」に従おうとしているコードから判断すると、同じ問題がありました。私にとっての修正は、元のモデルのすべてのフィールドの前にアンダースコアを付けることでした。

name = models.CharField(max_length=200,db_index=True)... BECOMES _name = models.CharField(max_length=200,db_index=True)

また、少しの調査では、Django 1.9 の時点で名前が変更されたインポートがあることが示されました

次のファイル「/Django/local/lib/python2.7/site-packages/parler/models.py」で、インポートともう 1 つの条件文参照 (782 行目) を「ReverseSingleRelatedObjectDescriptor」から「ForwardManyToOneDescriptor」に変更しました。しかし、最後のステップが本当に必要かどうかはわかりません。名前の変更で十分だと思います??幸運を祈ります.....

于 2018-03-25T16:34:00.027 に答える