Делаем существующие поля переводимыми (Джанго)
Я пытаюсь перевести уже существующие поля в модельный класс. Я застрял на самом первом шаге, который является подклассом 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])
2 ответа
Хорошо, судя по вашему коду, вы пытаетесь следовать "Django by Example" Антонио Меле.... У меня была такая же проблема. Исправление для меня состояло в том, чтобы префикс всех полей в исходной модели с подчеркиванием, так что...
name = models.CharField (max_length = 200, db_index = True)... СТАНОВИТСЯ _name = models.CharField(max_length=200,db_index=True)
Кроме того, небольшое исследование показало, что с Django 1.9 импорт переименован. ReverseSingleRelatedObjectDescriptor согласно https://github.com/django-json-api/django-rest-framework-json-api/issues/176
Я изменил ссылку на импорт и одну другую условную инструкцию (строка 782) с 'ReverseSingleRelatedObjectDescriptor' на 'ForwardManyToOneDescriptor' в следующем файле "/Django/local/lib/python2.7/site-packages/parler/models.py".. Но я не уверен, что последний шаг действительно необходим, я думаю, что переименование достаточно?? Удачи.....
Несмотря на то, что вопрос старый, я хотел бы внести свой вклад. Пожалуйста, ваш фрагмент кода после добавления django-parler должен выглядеть так:
class Category(TranslatableModel):
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])