AttributeError при совместном использовании django-datatrans и django-markitup - PullRequest
3 голосов
/ 12 января 2012

Я пытаюсь использовать django-datatrans для перевода MarkupField (из django-markitup ) на модель.Оба приложения работают правильно независимо друг от друга, но когда я регистрирую datatrans для перевода MarkupField, я больше не могу добавлять объекты в админ.

Соответствующий код:

from django.db import models
from markitup.fields import MarkupField
from datatrans.utils import register

class Work(models.Model):
    title = models.CharField(max_length=500)
    content = MarkupField(help_text=MARKDOWN_HELP)

class WorkTranslation(object):
    fields = ('title', 'content')

register(Work, WorkTranslation)

При попыткеДля добавления нового рабочего объекта в администратор я получаю следующую ошибку:

'unicode' object has no attribute 'raw'

Ошибка происходит здесь, в markitup-модуле (в строке rendered = render_func(value.raw):

.../lib/python2.7/site-packages/markitup/fields.py in pre_save

def pre_save(self, model_instance, add):
    value = super(MarkupField, self).pre_save(model_instance, add)
    rendered = render_func(value.raw)
    setattr(model_instance, _rendered_field_name(self.attname), rendered)
    return value.raw

Локальные переменные при сбое:

add: False
model_instance: <Work: This is the title>
value: u'This is the content.'
self: <markitup.fields.MarkupField: content>

Я пытался проверить переменную value, когда класс Work не зарегистрирован для перевода. В этом случае (и тогда он работает правильно) онэто не строка Юникода, а экземпляр markitup.fields.Markup.

Я не смог понять, почему тип меняется, и я понимаю, что этот вопрос довольно специфичен. Но я надеюсь, что у кого-то есть понимание в любом случае ..

1 Ответ

0 голосов
/ 23 марта 2014

Была такая же проблема с django-modeltranslation и django-markitup при тестировании:

class ModelTests(TestCase):
    def test_my_class(self):
        self.assertRaises(IntegrityError, models.MyClass.objects.create)

У меня работает с:

class ModelTests(TestCase):
    def test_my_class(self):
        with self.assertRaises(IntegrityError):
            models.MyClass.objects.create(info='', info_de='')

Где мои установленные языки en и de. Мой язык по умолчанию en. info - это мое поле с пометкой и переводом. (Я проверяю здесь, что поле MyClass требуется, поэтому IntegrityError.)

(Кстати, это приводит к несколько иной ошибке:

class ModelTests(TestCase):
    def test_my_class(self):
        self.assertRaises(IntegrityError, models.MyClass.objects.create(info=''))

Ошибка:

AttributeError: 'NoneType' object has no attribute 'raw'

)

Может быть, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...