我试图使用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。在这种情况下(然后它可以正常工作),它不是unicode字符串,而是markitup.fields.Markup的实例。
我还没有弄清楚为什么类型会改变,我意识到这个问题非常具体。但我还是希望有人有见地。。

最佳答案

在测试时与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='')

我安装的语言是ende。我的默认语言是eninfo是我的领域,有markitup和translation。(我在这里测试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'

)
也许这对某人有帮助。

关于python - 一起使用django-datatrans和django-markitup时发生AttributeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8835869/

10-16 22:27